Problem with a JAVA program launched in a PHP program

Discussion in 'Java' started by sylsau, Apr 28, 2006.

  1. sylsau

    sylsau Guest

    Hello,

    I wrote a JAVA program which uses the JAVA API JDOM 1.0 (of this site
    www.jdom.org)
    I put the archive jdom.jar in the directory /usr/share/java/jdom.jar
    and I added this path in the CLASSPATH variable.
    The program runs normally when I launch it in a unix shell.

    Now, I want to launch this JAVA program in a PHP program with system()
    function for example. I have an Apache server with PHP 4 who runs. The
    variable safe_mode of PHP is at off. So, the program PHP can launch
    executable program.

    But, It doesn't because of CLASSPATH problem I think. So, to understand
    where is the problem I recuced my programs and this is the 2 programs :

    - program JAVA :

    import java.io.*;
    import org.jdom.*;
    import org.jdom.input.*;


    class TestSAX{

    TestSAX()
    {

    }

    void instanciateSAXBuilder()
    {
    //On crée une instance de SAXBuilder
    try{
    SAXBuilder sxb = new SAXBuilder();

    System.out.println("Constructeur de SAX");


    }catch(Throwable e){

    e.printStackTrace();
    }
    }

    }

    public class Test {
    public static void main (String[] args) {

    PrintStream ps = null;

    try{

    ps = new PrintStream("./test.txt");

    }catch(Exception e){

    e.printStackTrace();

    }

    System.setOut(ps);
    System.setErr(ps);
    System.out.println("test");

    try {
    System.out.println("Step 1");
    TestSAX ts = new TestSAX();
    System.out.println("Step 2");
    ts.instanciateSAXBuilder();
    System.out.println("Step 3");
    } catch (Throwable t) {
    System.out.println("FAILED");
    t.printStackTrace();
    }


    }

    }

    - program PHP

    <?php

    $line = system("/usr/bin/java -cp /usr/share/java/jdom.jar Test",
    $retval);
    echo"Statut : ".$retval;

    ?>



    On my computer, Apache runs on the user www-data. And i tried to
    execute my program JAVA on this user and it runs normally. Besides, the
    CLASSPATH of the user www-data contain the path to jdom.jar

    This is the error message (contained in the file test.txt) after the
    execution of the PHP program :

    test
    Step 1
    FAILED
    java.lang.NoClassDefFoundError: org/jdom/input/SAXBuilder
    at Test.main(Test.java:51)


    So, it seems that the program doesn't find the SAXBuilder class what it
    wants to tell that the CLASSPATH is not good when PHP launch the
    program JAVA. But, I put the option -cp by launching the JAVA program
    in the PHP program so the CLASSPATH put in this option should be good.

    To be sure that this option could run, I made the following PHP program
    :

    $line = system("/usr/bin/javac Test.java", $retval);

    After that, it doesn't compile the program. So, I tried that :

    $line = system("/usr/bin/javac -cp /usr/share/java/jdom.jar Test.java",
    $retval);

    And there, the program is normally compiled !
    So, it's strange that here the CLASSPATH runs and in the other example
    it doesn't run.

    Somebody will have and idea about modifications that I can do on the
    programs ?


    Thanks to help me.

    Sylvain
     
    sylsau, Apr 28, 2006
    #1
    1. Advertisements

  2. sylsau

    Steve Sobol Guest

    What is the classpath inside the shell launched by the call to system() ??
     
    Steve Sobol, Apr 29, 2006
    #2
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.