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);


Reply via email to