Certains services Web SOAP sont créés avec JAX-RPC. Cela fonctionne bien. Mais dès que j'ajoute un gestionnaire, je reçois une exception. Lorsque la liaison est supprimée du fichier webservices.xml, tout fonctionne correctement. La chose étrange est, le gestionnaire lui-même n'est pas inclus dans la piletrace de l'exception. J'ai également remarqué, les méthodes init
et getHeaders
du gestionnaire sont appelées, avant que l'exception soit augmentée.Une exception se produit avec le gestionnaire JAX-RPC
Le gestionnaire est ajouté à webservices.xml avec le code XML suivant:
<handler>
<handler-name>My Message Handler</handler-name>
<handler-class>kpn.MyMessageHandler</handler-class>
</handler>
Le gestionnaire lui-même est juste un talon, généré par l'IDE de l'interface, donc je ne vais pas inclure la mise en œuvre entière:
public class MyMessageHandler implements javax.xml.rpc.handler.Handler {
@Override
public boolean handleRequest(MessageContext context) {
System.out.println("handel-Request");
return true;
}
...
}
Cela génère en fait trois exceptions dans ma journalisation (avec exactement le même horodatage). À cause de la longueur, je n'en inclue qu'une partie.
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
...
Quelqu'un a-t-il des idées pour résoudre ce problème?
Cela fait du sens. Lorsque le corps de la requête SOAP n'inclut pas les espaces entre les éléments, tout fonctionne bien ... – doekman
J'ai le même problème mais je n'ai pas d'autre lib contenant "SOAPElement" juste "saaj-api-1.3.jar" dans mon fichier EAR. – ricardo