I do
not think Axis has anything to do with JNI not working. I am using JNI with Axis
1.1 to call methods on ActiveX objects on Win2k machine and it all works fine.
The only steps I followed was register my ActiveX DLL. Then have C wrapper
DLL around the ActiveX object, which is loaded in Java using
System.loadLibrary(...). And it works fine. Of course, this is all Windows, but
I would imagine it should work similarly on Unix/Linux.
Thanks!
--
Niranjan.
-----Original Message-----Yes, all dependent libs are in the path.
From: Harald Pollak [mailto:[EMAIL PROTECTED]
Sent: Monday, July 07, 2003 10:39 AM
To: Axis-Dev
Subject: Re: Axis / JNI once more
The System.loadlibrary function works well, but the native function call doesn't work.
So more I try, I more and more believe that it will never work.
harry
On Mit, 2003-07-02 at 18:55, Sanjiva Weerawarana wrote:You're probably missing some dependent libraries? Try using "ldd" to see what the dependencies are and whether they are on your java.lib.path too. Sanjiva. ----- Original Message ----- From: "Harald Pollak" <[EMAIL PROTECTED]> To: "Axis-Dev" <[EMAIL PROTECTED]> Sent: Tuesday, July 01, 2003 3:58 PM Subject: RE: Axis / JNI once more > I tried to do this, and i got : > > init Class > * Native library 'JNIDate' loaded > Constructor > call method: [EMAIL PROTECTED] : 10.146.3.42:1800 > now > /usr/lib/j2sdk1.4.2/jre/lib/i386/client:/usr/lib/j2sdk1.4.2/jre/lib/i386:/us r/lib/j2sdk1.4.2/jre/../lib/i386 > java.lang.UnsatisfiedLinkError: getJNIDate > at SMS.JNIDate.getJNIDate(Native Method) > at SMS.JNIDate.getDate(JNIDate.java:31) > at > SMS.ServicesSoapBindingImpl.getDate(ServicesSoapBindingImpl.java:23) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:25) > at java.lang.reflect.Method.invoke(Method.java:324) > at > org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:402 ) > at > org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:3 09) > at > org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:333) > at > org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java: 71) > at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:150) > at org.apache.axis.SimpleChain.invoke(SimpleChain.java:120) > at > org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:481) > at org.apache.axis.server.AxisServer.invoke(AxisServer.java:323) > at > org.apache.axis.transport.http.AxisServlet.invokeEndpointFromGet(AxisServlet .java:544) > at > org.apache.axis.transport.http.AxisServlet.processMethodRequest(AxisServlet. java:466) > at > org.apache.axis.transport.http.AxisServlet.doGet(AxisServlet.java:294) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:743) > at > org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java: 339) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application FilterChain.java:286) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh ain.java:206) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja va:256) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:151) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562) > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja va:205) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:151) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562) > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:177 ) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:151) > at > org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve. java:171) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:149) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172 ) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:149) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562) > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java :156) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContex t.java:151) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:562) > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:974) > at > org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:203) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:637) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConne ction(Http11Protocol.java:484) > at > org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:568) > at > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.jav a:631) > at java.lang.Thread.run(Thread.java:534) > > > So in my oppinion the WS got the library, but it cannot access the > methode. > > I think it's where strange, because this class works in a servlet. > > maybe you have an other idea > > best regards > Harry > > > On Die, 2003-07-01 at 11:04, Lilantha Darshana wrote: > > > I guess you have to set LD_LIBRARY_PATH environment variable on your > > platform > > to pick up the .so from there. and make a call like: > > > > static { > > try { > > System.loadLibrary("JNIDate"); > > System.out.println("* Native library 'JNIDate' loaded"); > > } > > catch (Throwable e) { > > e.printStackTrace(); > > } > > } > > > > in your code. > > > > -Lilantha > > > > -----Original Message----- > > From: Sanjiva Weerawarana [mailto:[EMAIL PROTECTED] > > Sent: Tuesday, July 01, 2003 2:47 PM > > To: [EMAIL PROTECTED] > > Subject: Re: Axis / JNI once more > > > > > > 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" <[EMAIL PROTECTED]> > > To: "Axis-Dev" <[EMAIL PROTECTED]> > > 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" <[EMAIL PROTECTED]> > > > > To: <[EMAIL PROTECTED]> > > > > 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 > > > > > > > > > > > > > > >