我有一些使用JAX-RPC構建的SOAP web服務。這些工作正常。但是,只要我添加一個處理程序,我會得到一個異常。從webservices.xml中刪除綁定後,再次正常工作。JAX-RPC處理程序發生異常
奇怪的是,處理程序本身不包含在異常的棧跟蹤中。我還注意到,在引發異常之前調用處理程序的init
和getHeaders
方法。
處理程序中加入下面的XML的webservices.xml:
<handler>
<handler-name>My Message Handler</handler-name>
<handler-class>kpn.MyMessageHandler</handler-class>
</handler>
處理程序本身只是一個存根,從接口的IDE產生的,所以我不會包括整個執行:
public class MyMessageHandler implements javax.xml.rpc.handler.Handler {
@Override
public boolean handleRequest(MessageContext context) {
System.out.println("handel-Request");
return true;
}
...
}
這實際上在我的日誌記錄中生成了三個例外(具有完全相同的時間戳)。由於長度的原因,我只包含一部分。
Log Level WARNING
Logger javax.enterprise.system.container.web
Message ID preWebHandlerError java.lang.ClassCastException
Complete Message com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPElement at
com.sun.xml.rpc.server.StreamingHandler.getOpcodeForRequestMessage(StreamingHandler.java:657) at
com.sun.enterprise.webservice.WsUtil.getInvMethod(WsUtil.java:1277) at
com.sun.enterprise.webservice.ServletPreHandler.handleRequest(ServletPreHandler.java:86) at
com.sun.xml.rpc.client.HandlerChainImpl.handleRequest(HandlerChainImpl.java:103) at
com.sun.xml.rpc.server.StreamingHandler.callRequestHandlers(StreamingHandler.java:962) at
com.sun.xml.rpc.server.StreamingHandler.preHandlingHook(StreamingHandler.java:868) at
kpn.kpc.SOAPKPCReadCustomerClassification_v01PortType_Tie.preHandlingHook(SOAPKPCReadCustomerClassification_v01PortType_Tie.java:242) at
com.sun.xml.rpc.server.StreamingHandler.handle(StreamingHandler.java:127) at
com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doPost(JAXRPCServletDelegate.java:467) at
com.sun.enterprise.webservice.JAXRPCServlet.doPost(JAXRPCServlet.java:119) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:738) at
...
Log Level SEVERE
Logger com.sun.xml.rpc.server
Message ID com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPBodyElement java.lang.ClassCastException
Complete Message com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPBodyElement at
com.sun.enterprise.webservice.WsUtil.throwSOAPFaultException(WsUtil.java:1312) at
com.sun.enterprise.webservice.WsUtil.throwSOAPFaultException(WsUtil.java:1288) at
com.sun.enterprise.webservice.ServletPreHandler.handleRequest(ServletPreHandler.java:99) at
...
Log Level SEVERE
Logger com.sun.xml.rpc.server
Message ID JAXRPCTIE01
Complete Message caught exception while handling request: java.lang.ClassCastException: com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPBodyElement java.lang.ClassCastException: com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPBodyElement at
com.sun.enterprise.webservice.WsUtil.throwSOAPFaultException(WsUtil.java:1312) at
com.sun.enterprise.webservice.WsUtil.throwSOAPFaultException(WsUtil.java:1288) at
com.sun.enterprise.webservice.ServletPreHandler.handleRequest(ServletPreHandler.java:99) at
...
任何人都有一些想法來解決這個問題嗎?
這使得某種意義。當SOAP請求體不包含元素之間的空白時,一切正常...... – doekman 2009-02-13 15:30:36