You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by st...@apache.org on 2005/11/18 17:04:11 UTC
svn commit: r345511 -
/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/AxisFault.java
Author: stevel
Date: Fri Nov 18 08:04:04 2005
New Revision: 345511
URL: http://svn.apache.org/viewcvs?rev=345511&view=rev
Log:
moving to new model
Modified:
webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/AxisFault.java
Modified: webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/AxisFault.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/AxisFault.java?rev=345511&r1=345510&r2=345511&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/AxisFault.java (original)
+++ webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/AxisFault.java Fri Nov 18 08:04:04 2005
@@ -16,12 +16,28 @@
package org.apache.axis2;
+import org.apache.axis2.fault.FaultCode;
+import org.apache.axis2.fault.FaultReasonList;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.soap.SOAPFault;
+import org.apache.axis2.soap.SOAPFaultCode;
+import org.apache.axis2.soap.SOAPHeader;
+
+import javax.xml.namespace.QName;
import java.lang.reflect.InvocationTargetException;
import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
/**
* An exception which maps cleanly to a SOAP fault.
* This is a base class for exceptions which are mapped to faults.
+ *
+ * @see <a href="http://www.w3.org/TR/2003/REC-soap12-part1-20030624/#soapfault">
+ * SOAP1.2 specification</a>
+ * @see <a href="http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383507">SOAP1.1 Faults</a>
+
* SOAP faults contain
* <ol>
* <li>A fault string
@@ -29,30 +45,128 @@
* <li>A fault actor
* <li>Fault details; an xml tree of fault specific elements
* </ol>
+ *
+ * As SOAP1.2 faults are a superset of SOAP1.1 faults, this type holds soap1.2 fault information. When
+ * a SOAP1.1 fault is created, spurious information can be discarded.
+ * Mapping
+ * <pre>
+ * SOAP1.2 SOAP1.1
+ * node faultactor
+ * reason(0).text faultstring
+ * faultcode.value faultcode
+ * faultcode.subcode (discarded)
+ * detail detail
+ * role (discarded)
+ * </pre>
*/
public class AxisFault extends RemoteException {
- private String soapFaultCode;
- public AxisFault(Throwable arg1) {
- super(arg1.getMessage(), arg1);
+ /**
+ * Contains the faultcode
+ */
+ private FaultCode faultCode=new FaultCode();
+
+ /**
+ * SOAP1.2: URI of faulting node. Null for unknown.
+ *
+ * The value of the Node element information item is the URI that
+ * identifies the SOAP node that generated the fault.
+ * SOAP nodes that do not act as the ultimate SOAP receiver MUST include this element
+ * information item.
+ * An ultimate SOAP receiver MAY include this element information item to
+ * indicate explicitly that it generated the fault.
+ */
+ private String nodeURI;
+
+ /**
+ * our failt reasons
+ */
+ private FaultReasonList reasons=new FaultReasonList();
+
+ private OMElement detail;
+
+ /**
+ * An incoming SOAPFault
+ */
+ private SOAPFault soapFault;
+
+
+ /**
+ * assume headers are not used very often
+ */
+ private List headers=new ArrayList(0);
+
+
+ /**
+ * construct a fault from an exception
+ * TODO: handle AxisFaults or SOAPFaultException implementations differently?
+ * @param cause
+ */
+ public AxisFault(Throwable cause) {
+ this(cause!=null?cause.getMessage():null,cause);
+ }
+
+ /**
+ * @param message
+ */
+ public AxisFault(String message) {
+ super(message);
+ addReason(message);
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public AxisFault(String message, Throwable cause) {
+ super(message, cause);
+ if(message!=null) {
+ addReason(message);
+ }
+ }
+
+ /**
+ * @param messageText - this will appear as the Text in the Reason information item of SOAP Fault
+ * @param faultCode - this will appear as the Value in the Code information item of SOAP Fault
+ */
+ public AxisFault(String messageText, String faultCode) {
+ this(messageText);
+ setFaultCode(faultCode);
+ }
+
+ /**
+ * @param messageText - this will appear as the Text in the Reason information item of SOAP Fault
+ * @param faultCode - this will appear as the Value in the Code information item of SOAP Fault
+ * @param cause - this will appear under the Detail information item of SOAP Fault
+ */
+ public AxisFault(String messageText, String faultCode, Throwable cause) {
+ this(messageText, cause);
+ setFaultCode(faultCode);
}
+
/**
- * @param arg0
+ * @param messageText - this will appear as the Text in the Reason information item of SOAP Fault
+ * @param faultCode - this will appear as the Value in the Code information item of SOAP Fault
+ * @param cause - this will appear under the Detail information item of SOAP Fault
*/
- public AxisFault(String arg0) {
- super(arg0);
+ public AxisFault(String messageText, QName faultCode, Throwable cause) {
+ this(messageText, cause);
+ setFaultCode(faultCode);
}
+
/**
- * @param arg0
- * @param arg1
+ * Make an AxisFault from an incoming SOAPFault
+ * @param fault that caused the failure
*/
- public AxisFault(String arg0, Throwable arg1) {
- super(arg0, arg1);
+ public AxisFault(SOAPFault fault) {
+ soapFault = fault;
+ init(soapFault);
}
+
/**
* Make an AxisFault based on a passed Exception. If the Exception is
* already an AxisFault, simply use that. Otherwise, wrap it in an
@@ -73,35 +187,106 @@
if (e instanceof AxisFault) {
return (AxisFault) e;
}
- return new AxisFault(e.getMessage(), e);
+ return new AxisFault(e);
}
- /**
- *
- * @param messageText - this will appear as the Text in the Reason information item of SOAP Fault
- * @param faultCode - this will appear as the Value in the Code information item of SOAP Fault
- * @param cause - this will appear under the Detail information item of SOAP Fault
- */
- public AxisFault(String messageText, String faultCode, Throwable cause) {
- super(messageText, cause);
- this.soapFaultCode = faultCode;
- }
/**
- *
- * @param messageText - this will appear as the Text in the Reason information item of SOAP Fault
- * @param faultCode - this will appear as the Value in the Code information item of SOAP Fault
+ * Initialise from a SOAPFault. This is how incoming fault messages
+ * get turned into AxisFaults.
+ * @param fault incoming fault
*/
- public AxisFault(String messageText, String faultCode) {
- super(messageText);
- this.soapFaultCode = faultCode;
+ private void init(SOAPFault fault) {
+ SOAPFaultCode faultcodesource =fault.getCode();
+ faultCode=new FaultCode(faultcodesource);
+ detail=fault.getDetail();
+ fault.getNode();
}
+
+
public String getFaultCode() {
- return soapFaultCode;
+ return faultCode.getValueString();
}
public void setFaultCode(String soapFaultCode) {
- this.soapFaultCode = soapFaultCode;
+ faultCode.setValueString(soapFaultCode);
+ }
+
+ public void setFaultCode(QName soapFaultCode) {
+ faultCode.setValue(soapFaultCode);
+ }
+
+ /**
+ * Add a reason for the fault
+ * @param text text message
+ * @param language language
+ */
+ public void addReason(String text,String language) {
+ reasons.add(text,language);
+ }
+
+ /**
+ * Add a reason for the fault in the empty "" language
+ * @param text text message
+ */
+ public void addReason(String text) {
+ addReason(text, "");
+ }
+
+ /**
+ * Add a header to the list of fault headers
+ * @param header to add.
+ */
+ public void addHeader(SOAPHeader header) {
+ headers.add(header);
+ }
+
+ /**
+ * Iterate over all of the headers
+ * @return
+ */
+ public ListIterator headerIterator() {
+ return headers.listIterator();
+ }
+
+ /**
+ * Get at the headers. Useful for java1.5 iteration.
+ * @return the headers for this fault
+ */
+ public List headers() {
+ return headers;
+ }
+
+ /**
+ * Get the faulting node uri.
+ * SOAP1.2
+ * @return URI as a string or null
+ */
+ public String getNodeURI() {
+ return nodeURI;
+ }
+
+ /**
+ * Set the faulting node uri. SOAP1.2
+ */
+ public void setNodeURI(String nodeURI) {
+ this.nodeURI = nodeURI;
+ }
+
+ /**
+ * Get the current fault detail
+ * @return
+ */
+ public OMElement getDetail() {
+ return detail;
+ }
+
+ /**
+ * Set the entire detail element of the fault
+ * @param detail
+ */
+ public void setDetail(OMElement detail) {
+ this.detail = detail;
}
}