2013-04-21 169 views
0

請問我正面臨一個奇怪的問題,我需要您的幫助。 我正在使用oc4j 1013作爲java容器。 我有一個簡單的Web服務「GetDates」,我將它成功地部署在oc4j上,並通過調用其中的方法對其進行測試,併成功返回值。 然後我使用wsdl爲我的web服務創建了一個web服務代理,並且我從jdeveloper進行了測試,並且它也成功返回。 最後,我創建了一個Web應用程序,它只是一個普通的servlet,它內部使用了我之前做過的Web服務代理,並通過從jdeveloper運行它來測試它,併成功返回結果。 奇怪的是,當我決定將它部署在一個與web服務的oc4j相同的外部oc4j上時,並通過下面的異常調用servlet。使用Web服務部署Web應用程序後出現「java.lang.NoSuchMethodError」

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

回答

0

終於經過長時間的調查,我改變了我的調用Web服務的方式, 我開發了一個通用客戶端,它使用RPC調用來調用Web服務。 它工作正常:)

+0

你應該將自己的答案標記爲正確的答案! – 2013-04-22 13:41:19

2

這是不可能的JAR丟失,因爲類中找到。缺少該方法的特定方法或簽名是不同的。通常,當您擁有不同版本的相同依賴項時(例如,不同的JAR),就會發生這種情況。如果在類路徑中有兩個相同的類,就會發生這種情況。

0

確保方法簽名相同並檢查軟件包名稱。客戶端和服務器類應共享相同的包。

+0

我相信那裏的包是相同的名稱。但關於方法簽名......你是指什麼方法? – 2013-04-21 13:38:16