2012-04-18 68 views
1

我們已經在Netbeans 7.1中創建了一個在glassfish 3.1.1上運行良好的Web服務。現在我必須將我的服務應用程序遷移到Jboss 4.2.3 GA-JDK6。在Jboss上部署Web服務時沒有發現問題,但是調用Web服務會導致異常: - 「setProperty必須被SOAPMessage類的所有子類覆蓋」。爲了解決這個問題,我在JBOSS_HOME/lib/endorsed中加入了jboss-native-saaj.jar。這解決了這個問題,結果被調用的服務,但未能返回響應,但它導致了一個新的異常: -在Jboss 4.2.3中調用Web服務時的類拋出異常GA

Caused by: java.lang.ClassCastException: com.sun.xml.messaging.saaj.soap.ver1_1.Envelope1_1Impl cannot be cast to org.jboss.ws.core.soap.SOAPElementImpl 
at org.jboss.ws.core.soap.SOAPEnvelopeImpl.<init>(SOAPEnvelopeImpl.java:60) 
at org.jboss.ws.core.soap.EnvelopeBuilderDOM.build(EnvelopeBuilderDOM.java:124) 
at org.jboss.ws.core.soap.EnvelopeBuilderDOM.build(EnvelopeBuilderDOM.java:96) 
at org.jboss.ws.core.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:280) 
at org.jboss.ws.core.soap.SOAPMessageUnMarshallerHTTP.read(SOAPMessageUnMarshallerHTTP.java:84) 
at org.jboss.remoting.transport.http.HTTPClientInvoker.readResponse(HTTPClientInvoker.java:518) 
at org.jboss.remoting.transport.http.HTTPClientInvoker.useHttpURLConnection(HTTPClientInvoker.java:307) 
... 54 more 

而且我想告訴大家,我實際上是一個Web服務中調用WebService。 請幫忙,因爲沒有相同的文檔或解決方案。

由於提前

添加先前發生錯誤的完整堆棧跟蹤: -

javax.xml.ws.WebServiceException: java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage 
at org.jboss.ws.core.jaxws.client.ClientImpl.handleRemoteException(ClientImpl.java:404) 
at org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:314) 
at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:172) 
at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:152) 
at $Proxy183.authenticateUser(Unknown Source) 
at com.liaison.soi.sts.usermgmt.service.impl.UserManagementServiceImpl.authenticateUser(UserManagementServiceImpl.java:46) 
at com.liaison.soi.sts.usermgmt.service.impl.UserManagementServiceImpl.authenticateUser(UserManagementServiceImpl.java:25) 
at com.liaison.soi.sts.auth.AuthenticationHandler.validate(AuthenticationHandler.java:24) 
at com.sun.xml.wss.impl.callback.PasswordValidationCallback.getResult(PasswordValidationCallback.java:80) 
at com.sun.xml.wss.impl.misc.DefaultSecurityEnvironmentImpl.authenticateUser(DefaultSecurityEnvironmentImpl.java:1166) 
at com.sun.xml.ws.security.opt.impl.incoming.UsernameTokenHeader.validate(UsernameTokenHeader.java:160) 
at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.handleSecurityHeader(SecurityRecipient.java:341) 
at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.cacheHeaders(SecurityRecipient.java:275) 
at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.validateMessage(SecurityRecipient.java:225) 
at com.sun.xml.wss.jaxws.impl.SecurityTubeBase.verifyInboundMessage(SecurityTubeBase.java:450) 
at com.sun.xml.wss.jaxws.impl.SecurityServerTube.processRequest(SecurityServerTube.java:295) 
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:641) 
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:600) 
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585) 
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:482) 
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:314) 
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:608) 
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:259) 
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:213) 
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:159) 
at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:194) 
at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(WSServlet.java:80) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524) 
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446) 
at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage 
at javax.xml.soap.SOAPMessage.setProperty(SOAPMessage.java:454) 
at org.jboss.ws.core.soap.SOAPMessageImpl.<init>(SOAPMessageImpl.java:83) 
at org.jboss.ws.core.soap.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:171) 
at org.jboss.ws.core.CommonSOAP11Binding.createMessage(CommonSOAP11Binding.java:59) 
at org.jboss.ws.core.CommonSOAPBinding.bindRequestMessage(CommonSOAPBinding.java:158) 
at org.jboss.ws.core.CommonClient.invoke(CommonClient.java:291) 
at org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:302) 
+0

你會得到這個異常,因爲SAAJ實現自帶了JDK,在你的情況下,這個實現已經覆蓋了來自JBoss的實現。通常SOAP工廠是由庫本身定義的,但在你的情況下它不起作用。我會建議回到第一個例外,並嘗試從那裏解決問題。如果你爲'setProperty'問題展示更完整的堆棧跟蹤,或許我會得到一些想法。 – 2012-04-18 22:46:39

+0

嗨@dma_k,感謝您的快速回復。我已經按照要求在上面的問題本身中添加了完整的堆棧跟蹤。還想告訴你,我已經使用Sun的Metro Framework構建了服務,並且我想從另一個服務調用Web服務。 – 2012-04-19 05:31:38

回答

0

我覺得你的問題出在下面。

執行SOAPMessageImpl被封裝在jboss-native-saaj.jar中,直到JBoss 3.2.2.GA(檢查here)。最新的JBoss在jbossws-native-core.jar中有這個類。因此,當您將jboss-native-saaj.jar放入server/libs(或與您的應用程序一起打包)時,會造成類衝突。所以解決方案將是:只是刪除jboss-native-saaj.jar,因爲jbossws-native-core.jar是(我相信)已經在那裏。

爲了確保檢查META-INF對於jboss-native-saaj.jar:是否爲JBoss 4.2.3打包?那包裝的日期是什麼?這會讓你做出正確的決定。

相關問題