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