You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by bo...@apache.org on 2007/05/22 01:16:21 UTC

svn commit: r540348 - in /incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2: ODEService.java util/OMUtils.java util/SoapMessageConverter.java

Author: boisvert
Date: Mon May 21 16:16:20 2007
New Revision: 540348

URL: http://svn.apache.org/viewvc?view=rev&rev=540348
Log:
Better fault reporting

Modified:
    incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEService.java
    incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/OMUtils.java
    incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java

Modified: incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEService.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEService.java?view=diff&rev=540348&r1=540347&r2=540348
==============================================================================
--- incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEService.java (original)
+++ incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEService.java Mon May 21 16:16:20 2007
@@ -41,6 +41,7 @@
 import javax.wsdl.extensions.soap.SOAPAddress;
 import javax.xml.namespace.QName;
 
+import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axis2.AxisFault;
@@ -48,6 +49,7 @@
 import org.apache.axis2.description.AxisService;
 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.bpel.epr.EndpointFactory;
 import org.apache.ode.bpel.epr.MutableEndpoint;
@@ -224,16 +226,15 @@
         switch (mex.getStatus()) {
             case FAULT:
                 if (__log.isDebugEnabled())
-                    __log.debug("Generated FAULT response message: " +
-                        mex.getFault());
-                throw new AxisFault(mex.getFault(),
-                        mex.getFaultExplanation(), null, null,
-                        _converter.createSoapFault(mex.getFaultResponse().getMessage(), mex.getFault(), mex.getOperation()));
+                    __log.debug("Fault response message: " + mex.getFault());
+                OMElement detail = _converter.createSoapFault(mex.getFaultResponse().getMessage(), mex.getFault(), mex.getOperation());
+                String reason = mex.getFault()+" "+mex.getFaultExplanation();
+                throw new AxisFault(mex.getFault(), reason, null, null, detail);
             case ASYNC:
             case RESPONSE:
                 _converter.createSoapResponse(msgContext, mex.getResponse().getMessage(), mex.getOperation());
                 if (__log.isDebugEnabled())
-                    __log.debug("Generated response message " +
+                    __log.debug("Response message " +
                         msgContext.getEnvelope());
                 writeHeader(msgContext, mex);
                 break;

Modified: incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/OMUtils.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/OMUtils.java?view=diff&rev=540348&r1=540347&r2=540348
==============================================================================
--- incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/OMUtils.java (original)
+++ incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/OMUtils.java Mon May 21 16:16:20 2007
@@ -32,7 +32,6 @@
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMText;
-import org.apache.axis2.AxisFault;
 import org.apache.ode.utils.DOMUtils;
 import org.apache.ode.utils.NSContext;
 import org.w3c.dom.Attr;
@@ -49,16 +48,16 @@
  */
 public class OMUtils {
 
-    public static Element toDOM(OMElement element) throws AxisFault {
+    public static Element toDOM(OMElement element) {
         return toDOM(element, DOMUtils.newDocument());
     }
 
-    public static Element toDOM(OMElement element, Document doc) throws AxisFault { 
+    public static Element toDOM(OMElement element, Document doc) { 
         return toDOM(element,doc,true);
     }
     
     @SuppressWarnings("unchecked")
-    public static Element toDOM(OMElement element, Document doc, boolean deepNS) throws AxisFault {
+    public static Element toDOM(OMElement element, Document doc, boolean deepNS) {
         final Element domElement = doc.createElementNS(element.getQName().getNamespaceURI(), element.getQName().getLocalPart());
 
         if (deepNS) {
@@ -126,11 +125,11 @@
             nscontext.register("", element.getDefaultNamespace().getNamespaceURI());
     }
 
-    public static OMElement toOM(Element src, OMFactory omf) throws AxisFault {
+    public static OMElement toOM(Element src, OMFactory omf) {
         return toOM(src,omf,null);
     }
 
-    public static OMElement toOM(Element src, OMFactory omf, OMContainer parent) throws AxisFault {
+    public static OMElement toOM(Element src, OMFactory omf, OMContainer parent) {
         OMNamespace elns = null;
         if (src.getNamespaceURI() != null) {
             elns = omf.createOMNamespace(src.getNamespaceURI(), src.getPrefix());

Modified: incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java?view=diff&rev=540348&r1=540347&r2=540348
==============================================================================
--- incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java (original)
+++ incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/util/SoapMessageConverter.java Mon May 21 16:16:20 2007
@@ -258,24 +258,33 @@
 
     public OMElement createSoapFault(Element message, QName faultName, Operation op) throws AxisFault {
         if (faultName.getNamespaceURI() == null || !faultName.getNamespaceURI().equals(_def.getTargetNamespace()))
-            throw new OdeFault(__msgs.msgUndefinedFault(_serviceName, _portName, op.getName(), faultName));
+            return toFaultDetail(faultName, message);
         Fault f = op.getFault(faultName.getLocalPart());
         if (f == null)
-            throw new OdeFault(__msgs.msgUndefinedFault(_serviceName, _portName, op.getName(), faultName));
+            return toFaultDetail(faultName, message);
 
         // For faults, there will be exactly one part.
         Part p = (Part)f.getMessage().getParts().values().iterator().next();
-        Element partEl= DOMUtils.getFirstChildElement(DOMUtils.findChildByName(message,new QName(null,p.getName())));
-        if (partEl == null)
-            throw new OdeFault(__msgs.msgOdeMessageMissingRequiredPart(p.getName()));
         if (p == null)
-            throw new OdeFault(new IllegalStateException("fault part is non-element" + p.getName()));
+            return toFaultDetail(faultName, message);
+        Element partEl= DOMUtils.findChildByName(message,new QName(null,p.getName()));
+        if (partEl == null)
+            return toFaultDetail(faultName, message);
         Element detail = DOMUtils.findChildByName(partEl, p.getElementName());
         if (detail == null)
-            throw new OdeFault(__msgs.msgOdeMessagePartMissingRequiredElement(_serviceName, _portName, op.getName(), p.getElementName()));
+            return toFaultDetail(faultName, message);
 
         return OMUtils.toOM(detail, _soapFactory);
    }
+
+    private OMElement toFaultDetail(QName fault, Element message) {
+        if (message == null) return null;
+        Element firstPart = DOMUtils.getFirstChildElement(message);
+        if (firstPart == null) return null;
+        Element detail = DOMUtils.getFirstChildElement(firstPart);
+        if (detail == null) return OMUtils.toOM(firstPart, _soapFactory);
+        return OMUtils.toOM(detail, _soapFactory);
+    }
 
     public void parseSoapRequest(Element odeMessage, SOAPEnvelope envelope, Operation op) throws AxisFault {
         BindingOperation bop = _binding.getBindingOperation(op.getName(), null, null);