JAX-WS côté serveur SOAPHandler qui renvoie obtient la faute “Erreur Interne” sur WebSphere v8

J'ai un serveur-côté JAX-WS SOAPHandler (sur WebSphere v8) qui, dans certains cas, les besoins pour répondre au client avec un SAVON réponse qu'il a dans une variable de Chaîne (appelons responseXml).

Quand responseXml contient un succès (c'est à dire, de non-défaut) message SOAP, JAX-WS envoie la réponse au client correctement. Toutefois, lorsque responseXml contient un SAVON de message d'erreur, une Erreur Interne se produit, et le client obtient une autre anomalie de la réponse que l'on en responseXml, comme illustré ici:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <soapenv:Fault xmlns:axis2ns1="http://schemas.xmlsoap.org/soap/envelope/">
         <faultcode>axis2ns1:Server</faultcode>
         <faultstring>Internal Error</faultstring>
         <detail/>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

Le message d'erreur suivant est écrit dans la console:

[10/9/12 12:21:04:177 EDT] 00000025 AxisEngine    E org.apache.axis2.engine.AxisEngine receive An error was detected during JAXWS processing
                             org.apache.axis2.AxisFault: An error was detected during JAXWS processing
at org.apache.axis2.jaxws.server.JAXWSMessageReceiver.receive(JAXWSMessageReceiver.java:208)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:198)
at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172)
at com.ibm.ws.websvcs.transport.http.WASAxis2Servlet.doPost(WASAxis2Servlet.java:1466)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
...

Ici est simplifié SOAPHandler qui illustre bien ce problème. (Notez que la valeur de responseXml montré ici est juste un exemple. Dans ma réelle SOAPHandler, les réponses ne sont pas codées en dur mais sont lues à partir d'une base de données. J'essaie juste de montrer le plus simple exemple de code possible.)

package simplified.demo;
import java.io.ByteArrayInputStream;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
public class FaultyHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean outbound = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (!outbound) {
String responseXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Header></soapenv:Header><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server</faultcode><faultstring>ORA-01031: insufficient privileges</faultstring><detail/></soapenv:Fault></soapenv:Body></soapenv:Envelope>";
try {
SOAPMessage newMsg = createSOAPMessage(responseXml);
context.setMessage(newMsg);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return (outbound);
}
private SOAPMessage createSOAPMessage(String responseXml) {
try {
ByteArrayInputStream in = new ByteArrayInputStream(responseXml.getBytes());
MessageFactory messageFactory = MessageFactory.newInstance();
return messageFactory.createMessage(null, in);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public boolean handleFault(SOAPMessageContext context) {
return true;
}
@Override
public Set<QName> getHeaders() {
return null;
}
@Override
public void close(MessageContext context) {
}
}

- Je obtenir exactement le même message d'erreur quand je code le SOAPHandler pour créer un SOAPFault objet (à l'aide d'un SOAPFactory) et de le jeter dans un SOAPFaultException.

Basé sur la trace de la pile, j'ai regardé le code source de JAXWSMessageReceiver, et il semble que sous les couvertures, Axis2 est à la recherche d'un causedByException, mais bien sûr, dans ce cas, il n'en est pas une.

Personne ne sait pourquoi ce qui se passe ou comment il peut être fixé? Merci!

OriginalL'auteur user1717528 | 2012-10-09