axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Keith Hatton" <khat...@axiomsystems.com>
Subject RE: Axis / JNI - need help!
Date Mon, 30 Jun 2003 11:35:29 GMT
Hi Harald,
 
Do you think this might be a security problem? I've had problems loading native code in Tomcat
before.
 
You might try making sure your JNIDate class is loaded by the system classloader, rather than
the application classloader. I'm not familiar with the versions of Tomcat you mention but
it probably needs to be in common/classes or (as a JAR) common/lib of your Tomcat directory.
Or (depending on your knowledge of  Tomcat) maybe there is a .policy file you can edit to
give your application directory the right permissions.
 
Hope this helps
Keith
 

-----Original Message-----
From: Harald Pollak [mailto:h.pollak@pke.at]
Sent: 30 June 2003 12:17
To: axis-user@ws.apache.org
Subject: Axis / JNI - need help!


Hy everybody!

I try to use JNI within a Axis-Service. I try since weeks to bring it to work, but my result
is every time the same:

<soapenv:Envelope>
    <soapenv:Body>
        <soapenv:Fault>
            <faultcode>soapenv:Server.userException</faultcode>
            <faultstring>java.lang.reflect.InvocationTargetException</faultstring>
            <detail/>
        </soapenv:Fault>
    </soapenv:Body>
</soapenv:Envelope>

my enviroment:
Linux: SuSE 8.2
Tomcat 5 ( 5.0.3 Alpha ) ( allso tried with Tomcat 4.1.24 )
Axis 1.1 ( final ) ( allso tried with 1.1rc2 )
Client: Mozzila 1.4

Invocation:
I call the function getDate with 2 Parameters via:
 <http://localhost:8080/axis/services/services?method=getDate&in0=10.146.3.42&in1=1800>
http://localhost:8080/axis/services/services?method=getDate&in0=10.146.3.42&in1=1800

The Code:
-----------

The Implementation:

public class ServicesSoapBindingImpl implements SMS.JNIWS{

    public java.lang.String getDate(java.lang.String in0, int in1) throws java.rmi.RemoteException
{
        String s = new String();
        System.err.println(LibPath); 

        try {
            System.err.println("init Class"); 

         JNIDate jd = new JNIDate();
            System.err.println("call methode: "); 
            s = jd.getDate(in0, in1);
            System.err.println("finnished: " + s); 
        } catch (Exception ex) {
            System.err.println(ex.getStackTrace().toString());
         ex.printStackTrace();
      } 
        
        return s; 
    }

    public java.lang.String getVersion() throws java.rmi.RemoteException {
        return "1.0";
    }

    public java.lang.String getEnv() throws java.rmi.RemoteException {
//        return System.getProperty("java.library.path");
        return AxisProperties.getProperty("java.library.path");
    }

}

the Class-JNIDate:

class JNIDate {

    static { System.loadLibrary("JNIDate"); }

    public native String getJNIDate(String Server, int Port );

    public String getDate(String Server, int Port) {
        String s;
        try {
           System.err.println("call");
           s= getJNIDate(Server,Port);
            System.err.println(s);
            return s;
        } catch (Exception e) {
          System.err.println("Exeption!!!!");
              e.printStackTrace();
            return (String)(e.getMessage() + "\n : "+e.getCause().toString());
        }
    }
}


the output on Tomcat-console:
    init class
    call methode
    call

there is no  exception in logs or on console


when i call the getEnv - Methode:
    The path with my library-dir is shown.

What i allso tried:
    To outcommend the Nativecall and return a simpel string from JNIDate.getJNIDate ->
works fine.

    To write a servlet using the JNIDate.class and call it. -> works fine!

So my questions:

1.) has anybody allready written a Axis-Service using his own JNI-Class?
2.) has anybody seen a misstake in the upper code ( maybe i'm "codeblinde" - and it's a simple
error, so I read over it many times )?
3.) Has anyone a sample - I can try in my enviroment?

Thanks 
Harry 

Mime
View raw message