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