के साथ काम करते समय असंतुष्ट लिंक्स त्रुटि अपवाद मैं jni4net के माध्यम से जावा से सी # (डीएलएल) फ़ंक्शन पढ़ने पर काम कर रहा हूं और मूल जावा में मैं डीएलएल फ़ंक्शन से मूल्य प्राप्त करने में सफल रहा हूं लेकिन अब मैंने एक डायनामिक वेब बनाया है प्रोजेक्ट और सर्वलेट में समान कार्यक्षमता का उपयोग करने की कोशिश की। लेकिन अब केवल डीएलएल फ़ाइल सफलतापूर्वक लोड की जाती है, फ़ंक्शन को सफलतापूर्वक नहीं कहा जाता है। नीचे है कि मैं क्या करने की कोशिश की अब तक:डीएसएल और जावा jni4net
मेरे सर्वलेट:
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);
}
}
फर्क सिर्फ इतना है जब मैं इस कोर में जावा है कि मैं पूर्ण पथ का उपयोग नहीं किया था बजाय मैं केवल "lib इस्तेमाल किया बनाया/ADHelper.j4n.dll "पथ के लिए लेकिन किसी भी तरह से यह सर्वलेट में काम नहीं कर रहा था इसलिए मैंने इसे पथ को पूरा करने के लिए बदल दिया। वैसे भी डीएलएल फ़ाइल सफलतापूर्वक लोड किया जाता है।
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;
}
}
underdscore नाम ADHelper वर्ग जब मैं proxygen आदेश दौड़ा को मिश्रित किया गया था। dll फ़ाइल में समारोह लॉग इन() भी Login2(), लेकिन Login2() रख दिया गया ADHelper और ADHelper
नामित दो वर्गों जबकि लॉग इन मेरी सर्वलेट() द्वारा मान्यता प्राप्त नहीं है मान्यता प्राप्त है देखते हैं।
जनरेट किया गया जावा वर्ग 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;
}
}
सभी मानचित्रण सही है लेकिन मेरा लॉग इन समारोह unsatisfiedLinkError दे रहा है। पढ़ने के दौरान धैर्य रखने के लिए धन्यवाद, कृपया मेरी समस्या का समाधान दें।
के बाद त्रुटि सांत्वना पर आ रहा है:
*All Dll file loaded message*
Jun 3, 2015 10:56:39 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet LoginProcess threw exception
java.lang.UnsatisfiedLinkError: adhelper.ADHelper.Login(Ljava/lang/String;Ljava/lang/String;)Lsystem/Enum;
at adhelper.ADHelper.Login(Native Method)
at com.karvy.login.LoginProcess.doGet(LoginProcess.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
मैं वेब संदर्भ क्लासलोडर से लोड करने के लिए डीएल को मजबूर कर रहा हूं लेकिन कोई बदलाव नहीं है। –