使用Web服务部署Web应用程序后出现错误“java.lang.NoSuchMethodError”

时间:2013-04-21 09:15:27

标签: java web-services servlets oc4j webproxy

请说我面临一个奇怪的问题,我需要你的帮助。 我使用oc4j 1013作为java容器。 我有一个简单的Web服务“GetDates”,我在oc4j上成功部署了它,并通过调用其中的方法对其进行测试,并成功返回值。 然后我使用wsdl为我的Web服务创建了一个Web服务代理,我从jdeveloper中测试了它并且它也成功返回。 最后,我创建了一个Web应用程序,只是一个普通的servlet,我使用了之前刚刚执行的Web服务代理,并通过从jdeveloper运行它来测试它,并成功返回结果。 奇怪的是,当我决定将它部署在一个外部的oc4j上时,它就是web服务的oc4j,并调用servlet,它通过下面的例外。

java.lang.NoSuchMethodError: datespackage.runtime.GetDatesWS_getDateHence_ResponseStruct_LiteralSerializer.setSOAPVersion(Loracle/j2ee/ws/common/soap/SOAPVersion;)
at datespackage.runtime.GetDatesWS_getDateHence_ResponseStruct_LiteralSerializer.<init>(GetDatesWS_getDateHence_ResponseStruct_LiteralSerializer.java:37)
at datespackage.runtime.GetDatesService_SerializerRegistry.getRegistry(GetDatesService_SerializerRegistry.java:31)
at datespackage.runtime.GetDatesService_Impl.<init>(GetDatesService_Impl.java:26)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at oracle.j2ee.ws.client.ServiceFactoryImpl.createService(ServiceFactoryImpl.java:92)
at oracle.j2ee.ws.client.ServiceFactoryImpl.loadService(ServiceFactoryImpl.java:121)
at datespackage.GetDatesWSSoapHttpPortClient.<init>(GetDatesWSSoapHttpPortClient.java:22)
at webproject.indexClass.doGet(indexClass.java:27)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:719)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:376)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:870)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:451)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:218)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:119)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
at java.lang.Thread.run(Thread.java:619)

我感觉可能有丢失的罐子或其他东西。

我正在使用JDeveloper 1013和oc4j 1013 我正在使用JDK 1.5

3 个答案:

答案 0 :(得分:2)

由于找到了类,因此JAR不太可能丢失。缺少特定方法或该方法的签名是不同的。通常,当您具有相同依赖项的不同版本(例如,不同的JAR)时会发生这种情况。如果类路径中有两个相同的类,则会发生这种情况。

答案 1 :(得分:0)

确保方法签名相同并检查包名称。客户端和服务器类应共享相同的包。

答案 2 :(得分:0)

经过长时间的调查后,我改变了调用网络服务的方式, 我开发了一个通用客户端,使用RPC Call调用Web服务。 它运作良好:)