You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Harald Pollak <h....@pke.at> on 2003/06/30 13:06:20 UTC

Axis / JNI once more

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

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

Re: Axis / JNI once more

Posted by Steve Loughran <st...@iseran.com>.
Harald Pollak wrote:
>   Thanks this was a very good hint, now i know that the library isn't found.
> (java.lang.UnsatisfiedLinkError: getJNIDate)
> 
> But now is stand befor an other problem:
> I tried to print out the java.library.path ( got by
> System.err.println(AxisProperties.getProperty("java.library.path"));
> )
> 
> but my libJNIDate.so is in this path.
> 
> Is there an other path used by axis?

which platform? Windows? Java uses the path set by ::LoadLibrary in the 
win32 API, which is PATH or Path on the environemnt. What is trouble is 
that followon loads to the first load do not always follow the 
library.path, so if you had one DLL in that path, the remainder need to 
be on PATH.

try deploying the shared libs to JAVA_HOME/bin


Re: Axis / JNI once more

Posted by Sanjiva Weerawarana <sa...@watson.ibm.com>.
Do you mean that libJNIDate.so is on your java.lib.path directly?
Its been a while since I did JNI, but given that you say
loadLibrary ("JNIDate") I'm pretty sure that the path should
have the directory that that library is in only.

Sanjiva.

----- Original Message -----
From: "Harald Pollak" <h....@pke.at>
To: "Axis-Dev" <ax...@ws.apache.org>
Sent: Tuesday, July 01, 2003 12:55 PM
Subject: Re: Axis / JNI once more


> Thanks this was a very good hint, now i know that the library isn't
> found.
> (java.lang.UnsatisfiedLinkError: getJNIDate)
>
> But now is stand befor an other problem:
> I tried to print out the java.library.path ( got by
> System.err.println(AxisProperties.getProperty("java.library.path"));
> )
>
> but my libJNIDate.so is in this path.
>
> Is there an other path used by axis?
>
> thanks
> harry
>
>
> On Die, 2003-07-01 at 08:24, Sanjiva Weerawarana wrote:
>
> > Try changing the catch around jd.getDate() to catch (Throwable) ..
> > maybe its throwing something you're not catching.
> >
> > Sanjiva.
> >
> > ----- Original Message -----
> > From: "Harald Pollak" <h....@pke.at>
> > To: <ax...@ws.apache.org>
> > Sent: Monday, June 30, 2003 5:06 PM
> > Subject: Axis / JNI once more
> >
> >
> > > 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
> > >
> > > 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
> > >
> >
>


Re: Axis / JNI once more

Posted by Harald Pollak <h....@pke.at>.
Thanks this was a very good hint, now i know that the library isn't
found.
(java.lang.UnsatisfiedLinkError: getJNIDate)

But now is stand befor an other problem: 
I tried to print out the java.library.path ( got by 
System.err.println(AxisProperties.getProperty("java.library.path"));
)

but my libJNIDate.so is in this path.

Is there an other path used by axis?

thanks
harry


On Die, 2003-07-01 at 08:24, Sanjiva Weerawarana wrote:

> Try changing the catch around jd.getDate() to catch (Throwable) ..
> maybe its throwing something you're not catching.
> 
> Sanjiva.
> 
> ----- Original Message -----
> From: "Harald Pollak" <h....@pke.at>
> To: <ax...@ws.apache.org>
> Sent: Monday, June 30, 2003 5:06 PM
> Subject: Axis / JNI once more
> 
> 
> > 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
> >
> > 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
> >
> 

Re: Axis / JNI once more

Posted by Sanjiva Weerawarana <sa...@watson.ibm.com>.
Try changing the catch around jd.getDate() to catch (Throwable) ..
maybe its throwing something you're not catching.

Sanjiva.

----- Original Message -----
From: "Harald Pollak" <h....@pke.at>
To: <ax...@ws.apache.org>
Sent: Monday, June 30, 2003 5:06 PM
Subject: Axis / JNI once more


> 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
>
> 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
>