c# - UnsatisfiedLinkError exception while working with dll and java jni4net -


i have been working on reading c#(dll) function java through jni4net , in core java have succeeded in getting value dll function have created 1 dynamic web project , tried use same functionality in servlet. dll file loaded succesfully, function not called succesfuly. below tried till now:

my servlet:

public class loginprocess extends httpservlet {     private static final long serialversionuid = 1l;      protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {          try {              bridge.setverbose(true);             bridge.init();             console.writeline("hello .net world!\n");              bridge.loadandregisterassemblyfrom(new file("c:/users/ashish.it/workspace/finaljniweb/webcontent/web-inf/lib/adhelper.j4n.dll"));          } catch (ioexception e) {             e.printstacktrace();         }         enum output;         output=adhelper.login("user", "pass");         system.out.println(output);     } } 

the difference when made in core java didn't used complete path instead used "lib/adhelper.j4n.dll" path somehow not working in servlet changed complete path. anyways dll file loaded succesfully.

adhelper.generated.cs

namespace adhelper {     public partial class adhelper_ {  methods.add(global::net.sf.jni4net.jni.jninativemethod.create(@__type, "login", "login2", "(ljava/lang/string;ljava/lang/string;)lsystem/enum;"));    private static global::net.sf.jni4net.utils.jnihandle login2(global::system.intptr @__envp, global::net.sf.jni4net.utils.jnilocalhandle @__class, global::net.sf.jni4net.utils.jnilocalhandle username, global::net.sf.jni4net.utils.jnilocalhandle password) {             // (ljava/lang/string;ljava/lang/string;)lsystem/enum;             // (lsystem/string;lsystem/string;)ladhelper/adhelper+loginresult;             global::net.sf.jni4net.jni.jnienv @__env = global::net.sf.jni4net.jni.jnienv.wrap(@__envp);             global::net.sf.jni4net.utils.jnihandle @__return = default(global::net.sf.jni4net.utils.jnihandle);             try {             @__return = global::net.sf.jni4net.utils.convertor.strongc2jp<global::adhelper.adhelper.loginresult>(@__env, global::adhelper.adhelper.login(global::net.sf.jni4net.utils.convertor.strongj2cstring(@__env, username), global::net.sf.jni4net.utils.convertor.strongj2cstring(@__env, password)));             }catch (global::system.exception __ex){@__env.throwexisting(__ex);}             return @__return;         } } 

the underdscore mingled name adhelper class when ran proxygen command. in dll file there 2 classes named adhelper , adhelper

the function login() changed login2() login2() not recognized servlet whereas login() recognized.

generated java class adhelper.java

package adhelper;  @net.sf.jni4net.attributes.clrtype public class adhelper extends system.object {   private static system.type statictype;      protected adhelper(net.sf.jni4net.inj.injenv __env, long __handle) {             super(__env, __handle);     }      @net.sf.jni4net.attributes.clrconstructor("()v")     public adhelper() {             super(((net.sf.jni4net.inj.injenv)(null)), 0);         adhelper.adhelper.__ctoradhelper0(this);     }  @net.sf.jni4net.attributes.clrmethod("(lsystem/string;lsystem/string;)ladhelper/adhelper+loginresult;")     public native static system.enum login(java.lang.string username, java.lang.string password);   public static system.type typeof() {         return adhelper.adhelper.statictype;     }   private static void initjni(net.sf.jni4net.inj.injenv env, system.type statictype) {         adhelper.adhelper.statictype = statictype;     } } 

all mapping correct login function giving unsatisfiedlinkerror. having patience while reading, please give solution problem.

following error coming on console:

*all dll file loaded message* jun 3, 2015 10:56:39 org.apache.catalina.core.standardwrappervalve invoke severe: servlet.service() servlet loginprocess threw exception java.lang.unsatisfiedlinkerror: adhelper.adhelper.login(ljava/lang/string;ljava/lang/string;)lsystem/enum;     @ adhelper.adhelper.login(native method)     @ com.karvy.login.loginprocess.doget(loginprocess.java:62)     @ javax.servlet.http.httpservlet.service(httpservlet.java:617)     @ javax.servlet.http.httpservlet.service(httpservlet.java:723)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:290)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:206)     @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:233)     @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:191)     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:127)     @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:103)     @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:109)     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:293)     @ org.apache.coyote.http11.http11processor.process(http11processor.java:861)     @ org.apache.coyote.http11.http11protocol$http11connectionhandler.process(http11protocol.java:606)     @ org.apache.tomcat.util.net.jioendpoint$worker.run(jioendpoint.java:489)     @ java.lang.thread.run(thread.java:662) 

maybe can test class-loader loading file different class-loaders in different context.


Comments