You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by mr...@apache.org on 2007/12/13 18:18:31 UTC

svn commit: r603957 - /ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ExternalService.java

Author: mriou
Date: Thu Dec 13 09:18:29 2007
New Revision: 603957

URL: http://svn.apache.org/viewvc?rev=603957&view=rev
Log:
Fixed a potential NPE for unknown returned fault types.

Modified:
    ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ExternalService.java

Modified: ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ExternalService.java
URL: http://svn.apache.org/viewvc/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ExternalService.java?rev=603957&r1=603956&r2=603957&view=diff
==============================================================================
--- ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ExternalService.java (original)
+++ ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ExternalService.java Thu Dec 13 09:18:29 2007
@@ -22,6 +22,7 @@
 import java.util.concurrent.Callable;
 
 import javax.wsdl.Definition;
+import javax.wsdl.Fault;
 import javax.wsdl.Operation;
 import javax.xml.namespace.QName;
 
@@ -37,6 +38,7 @@
 import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.ode.axis2.util.OMUtils;
 import org.apache.ode.axis2.util.SoapMessageConverter;
 import org.apache.ode.il.epr.EndpointFactory;
 import org.apache.ode.il.epr.MutableEndpoint;
@@ -286,7 +288,13 @@
 
         try {
             PartnerRoleMessageExchange odeMex = (PartnerRoleMessageExchange) _server.getMessageExchange(odeMexId);
-            QName nonNullFT = faultType != null ? faultType : new QName(Namespaces.ODE_EXTENSION_NS, "unknownFault");
+            QName nonNullFT = new QName(Namespaces.ODE_EXTENSION_NS, "unknownFault");
+            if (faultType != null) {
+                Fault f = odeMex.getOperation().getFault(faultType.getLocalPart());
+                if (f != null && f.getMessage().getQName() != null)
+                    nonNullFT = f.getMessage().getQName();
+                else __log.debug("Fault " + faultType + " isn't referenced in the service definition, unknown fault.");
+            }
             Message response = fault ? odeMex.createMessage(odeMex.getOperation()
                     .getFault(nonNullFT.getLocalPart()).getMessage().getQName()) : odeMex
                     .createMessage(odeMex.getOperation().getOutput().getMessage().getQName());
@@ -305,7 +313,8 @@
                         if (__log.isDebugEnabled()) {
                             __log.debug("FAULT RESPONSE(unknown fault type): " + DOMUtils.domToString(odeMsgEl));
                         }
-                        odeMex.replyWithFailure(FailureType.OTHER, reply.getEnvelope().getBody().getFault().getText(), null);
+                        odeMex.replyWithFailure(FailureType.OTHER, reply.getEnvelope().getBody().getFault().getText(), 
+                                OMUtils.toDOM(reply.getEnvelope().getBody()));
                     }
                 } else {
                     if (__log.isDebugEnabled()) {