background image

Creating and Populating a SOAPFault Object

<< Overviewof SOAP Faults | Retrieving Fault Information >>
<< Overviewof SOAP Faults | Retrieving Fault Information >>

Creating and Populating a SOAPFault Object

Creating and Populating a SOAPFault Object
You have seen how to add content to a SOAPBody object; this section walks you through adding a
SOAPFault
object to a SOAPBody object and then adding its constituent parts.
As with adding content, the first step is to access the SOAPBody object.
SOAPBody body = message.getSOAPBody();
With the SOAPBody object body in hand, you can use it to create a SOAPFault object. The
following line of code creates a SOAPFault object and adds it to body.
SOAPFault fault = body.addFault();
The SOAPFault interface provides convenience methods that create an element, add the new
element to the SOAPFault object, and add a text node, all in one operation. For example, in the
following lines of SOAP 1.1 code, the method setFaultCode creates a faultcode element, adds
it to fault, and adds a Text node with the value "SOAP-ENV:Server" by specifying a default
prefix and the namespace URI for a SOAP envelope.
QName faultName = new QName(SOAPConstants.URI_NS_SOAP_ENVELOPE,
"Server");
fault.setFaultCode(faultName);
fault.setFaultActor(
"http://gizmos.com/orders");
fault.setFaultString(
"Server not responding");
The SOAP 1.2 code would look like this:
QName faultName = new QName(SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE,
"Receiver");
fault.setFaultCode(faultName);
fault.setFaultRole(
"http://gizmos.com/order");
fault.addFaultReasonText(
"Server not responding", Locale.US);
To add one or more subcodes to the fault code, call the method fault.appendFaultSubcode,
which takes a QName argument.
The SOAPFault object fault, created in the preceding lines of code, indicates that the cause of
the problem is an unavailable server and that the actor at http://gizmos.com/orders is having
the problem. If the message were being routed only to its ultimate destination, there would have
been no need to set a fault actor. Also note that fault does not have a Detail object because it
does not relate to the SOAPBody object. (If you use SOAP 1.2, you can use the setFaultRole
method instead of setFaultActor.)
The following SOAP 1.1 code fragment creates a SOAPFault object that includes a Detail
object. Note that a SOAPFault object can have only one Detail object, which is simply a
container for DetailEntry objects, but the Detail object can have multiple DetailEntry
objects. The Detail object in the following lines of code has two DetailEntry objects added to
it.
SAAJ Tutorial
The Java EE 5 Tutorial · September 2007
610