<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.4.2_08) on Sat Apr 22 18:56:42 PDT 2006 -->
<TITLE>
SOAPFault (Axis API)
</TITLE>

<META NAME="keywords" CONTENT="javax.xml.soap.SOAPFault interface">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    parent.document.title="SOAPFault (Axis API)";
}
</SCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/SOAPFault.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../javax/xml/soap/SOAPEnvelope.html" title="interface in javax.xml.soap"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../javax/xml/soap/SOAPFaultElement.html" title="interface in javax.xml.soap"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="SOAPFault.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>

</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
javax.xml.soap</FONT>
<BR>
Interface SOAPFault</H2>
<DL>
<DT><B>All Superinterfaces:</B> <DD>org.w3c.dom.Element, <A HREF="../../../javax/xml/soap/Node.html" title="interface in javax.xml.soap">Node</A>, org.w3c.dom.Node, <A HREF="../../../javax/xml/soap/SOAPBodyElement.html" title="interface in javax.xml.soap">SOAPBodyElement</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html" title="interface in javax.xml.soap">SOAPElement</A></DD>
</DL>
<DL>
<DT><B>All Known Implementing Classes:</B> <DD><A HREF="../../../org/apache/axis/message/SOAPFault.html" title="class in org.apache.axis.message">SOAPFault</A></DD>
</DL>
<HR>
<DL>
<DT>public interface <B>SOAPFault</B><DT>extends <A HREF="../../../javax/xml/soap/SOAPBodyElement.html" title="interface in javax.xml.soap">SOAPBodyElement</A></DL>

<P>
An element in the <CODE>SOAPBody</CODE> object that contains
   error and/or status information. This information may relate to
   errors in the <CODE>SOAPMessage</CODE> object or to problems
   that are not related to the content in the message itself.
   Problems not related to the message itself are generally errors
   in processing, such as the inability to communicate with an
   upstream server.
   <P>
   The <CODE>SOAPFault</CODE> interface provides methods for
   retrieving the information contained in a <CODE>
   SOAPFault</CODE> object and for setting the fault code, the
   fault actor, and a string describing the fault. A fault code is
   one of the codes defined in the SOAP 1.1 specification that
   describe the fault. An actor is an intermediate recipient to
   whom a message was routed. The message path may include one or
   more actors, or, if no actors are specified, the message goes
   only to the default actor, which is the final intended
   recipient.
<P>

<P>
<HR>

<P>
<!-- ======== NESTED CLASS SUMMARY ======== -->


<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Field Summary</B></FONT></TD>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_org.w3c.dom.Node"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Fields inherited from interface org.w3c.dom.Node</B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>ATTRIBUTE_NODE, CDATA_SECTION_NODE, COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, DOCUMENT_NODE, DOCUMENT_TYPE_NODE, ELEMENT_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, NOTATION_NODE, PROCESSING_INSTRUCTION_NODE, TEXT_NODE</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->


<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Method Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../javax/xml/soap/Detail.html" title="interface in javax.xml.soap">Detail</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#addDetail()">addDetail</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a <CODE>Detail</CODE> object and sets it as the
   <CODE>Detail</CODE> object for this <CODE>SOAPFault</CODE>
   object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../javax/xml/soap/Detail.html" title="interface in javax.xml.soap">Detail</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#getDetail()">getDetail</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the detail element for this <CODE>SOAPFault</CODE>
   object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#getFaultActor()">getFaultActor</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the fault actor for this <CODE>SOAPFault</CODE>
 object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#getFaultCode()">getFaultCode</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the fault code for this <CODE>SOAPFault</CODE>
 object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../javax/xml/soap/Name.html" title="interface in javax.xml.soap">Name</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#getFaultCodeAsName()">getFaultCodeAsName</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the mandatory SOAP 1.1 fault code for this <code>SOAPFault</code>
 object as a SAAJ <code>Name</code> object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#getFaultString()">getFaultString</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the fault string for this <CODE>SOAPFault</CODE>
 object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.util.Locale</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#getFaultStringLocale()">getFaultStringLocale</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns the optional detail element for this <code>SOAPFault</code>
 object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#setFaultActor(java.lang.String)">setFaultActor</A></B>(java.lang.String&nbsp;faultActor)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets this <CODE>SOAPFault</CODE> object with the given
   fault actor.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#setFaultCode(javax.xml.soap.Name)">setFaultCode</A></B>(<A HREF="../../../javax/xml/soap/Name.html" title="interface in javax.xml.soap">Name</A>&nbsp;name)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets this <code>SOAPFault</code> object with the given fault code.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#setFaultCode(java.lang.String)">setFaultCode</A></B>(java.lang.String&nbsp;faultCode)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets this <CODE>SOAPFault</CODE> object with the given
   fault code.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#setFaultString(java.lang.String)">setFaultString</A></B>(java.lang.String&nbsp;faultString)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the fault string for this <CODE>SOAPFault</CODE>
 object to the given string.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPFault.html#setFaultString(java.lang.String, java.util.Locale)">setFaultString</A></B>(java.lang.String&nbsp;faultString,
               java.util.Locale&nbsp;locale)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the fault string for this <code>SOAPFault</code> object to the given
 string and localized to the given locale.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_javax.xml.soap.SOAPElement"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from interface javax.xml.soap.<A HREF="../../../javax/xml/soap/SOAPElement.html" title="interface in javax.xml.soap">SOAPElement</A></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../javax/xml/soap/SOAPElement.html#addAttribute(javax.xml.soap.Name, java.lang.String)">addAttribute</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#addChildElement(javax.xml.soap.Name)">addChildElement</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#addChildElement(javax.xml.soap.SOAPElement)">addChildElement</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#addChildElement(java.lang.String)">addChildElement</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#addChildElement(java.lang.String, java.lang.String)">addChildElement</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#addChildElement(java.lang.String, java.lang.String, java.lang.String)">addChildElement</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#addNamespaceDeclaration(java.lang.String, java.lang.String)">addNamespaceDeclaration</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#addTextNode(java.lang.String)">addTextNode</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#getAllAttributes()">getAllAttributes</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#getAttributeValue(javax.xml.soap.Name)">getAttributeValue</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#getChildElements()">getChildElements</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#getChildElements(javax.xml.soap.Name)">getChildElements</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#getElementName()">getElementName</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#getEncodingStyle()">getEncodingStyle</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#getNamespacePrefixes()">getNamespacePrefixes</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#getNamespaceURI(java.lang.String)">getNamespaceURI</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#getVisibleNamespacePrefixes()">getVisibleNamespacePrefixes</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#removeAttribute(javax.xml.soap.Name)">removeAttribute</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#removeContents()">removeContents</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#removeNamespaceDeclaration(java.lang.String)">removeNamespaceDeclaration</A>, <A HREF="../../../javax/xml/soap/SOAPElement.html#setEncodingStyle(java.lang.String)">setEncodingStyle</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_javax.xml.soap.Node"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from interface javax.xml.soap.<A HREF="../../../javax/xml/soap/Node.html" title="interface in javax.xml.soap">Node</A></B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><A HREF="../../../javax/xml/soap/Node.html#detachNode()">detachNode</A>, <A HREF="../../../javax/xml/soap/Node.html#getParentElement()">getParentElement</A>, <A HREF="../../../javax/xml/soap/Node.html#getValue()">getValue</A>, <A HREF="../../../javax/xml/soap/Node.html#recycleNode()">recycleNode</A>, <A HREF="../../../javax/xml/soap/Node.html#setParentElement(javax.xml.soap.SOAPElement)">setParentElement</A>, <A HREF="../../../javax/xml/soap/Node.html#setValue(java.lang.String)">setValue</A></CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_org.w3c.dom.Node"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from interface org.w3c.dom.Node</B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>appendChild, cloneNode, getAttributes, getChildNodes, getFirstChild, getLastChild, getLocalName, getNamespaceURI, getNextSibling, getNodeName, getNodeType, getNodeValue, getOwnerDocument, getParentNode, getPrefix, getPreviousSibling, hasAttributes, hasChildNodes, insertBefore, isSupported, normalize, removeChild, replaceChild, setNodeValue, setPrefix</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_org.w3c.dom.Element"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from interface org.w3c.dom.Element</B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>getAttribute, getAttributeNode, getAttributeNodeNS, getAttributeNS, getElementsByTagName, getElementsByTagNameNS, getTagName, hasAttribute, hasAttributeNS, removeAttribute, removeAttributeNode, removeAttributeNS, setAttribute, setAttributeNode, setAttributeNodeNS, setAttributeNS</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ FIELD DETAIL =========== -->


<!-- ========= CONSTRUCTOR DETAIL ======== -->


<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=1><FONT SIZE="+2">
<B>Method Detail</B></FONT></TD>
</TR>
</TABLE>

<A NAME="setFaultCode(java.lang.String)"><!-- --></A><H3>
setFaultCode</H3>
<PRE>
public void <B>setFaultCode</B>(java.lang.String&nbsp;faultCode)
                  throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Sets this <CODE>SOAPFault</CODE> object with the given
   fault code.

   <P>Fault codes, which given information about the fault,
   are defined in the SOAP 1.1 specification.</P>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>faultCode</CODE> - a <CODE>String</CODE> giving
     the fault code to be set; must be one of the fault codes
     defined in the SOAP 1.1 specification
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></CODE> - if there was an error in
     adding the <CODE>faultCode</CODE> to the underlying XML
     tree.<DT><B>See Also:</B><DD><A HREF="../../../javax/xml/soap/SOAPFault.html#getFaultCode()"><CODE>getFaultCode()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="getFaultCode()"><!-- --></A><H3>
getFaultCode</H3>
<PRE>
public java.lang.String <B>getFaultCode</B>()</PRE>
<DL>
<DD>Gets the fault code for this <CODE>SOAPFault</CODE>
 object.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>a <CODE>String</CODE> with the fault code<DT><B>See Also:</B><DD><A HREF="../../../javax/xml/soap/SOAPFault.html#setFaultCode(java.lang.String)"><CODE>setFaultCode(java.lang.String)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="setFaultActor(java.lang.String)"><!-- --></A><H3>
setFaultActor</H3>
<PRE>
public void <B>setFaultActor</B>(java.lang.String&nbsp;faultActor)
                   throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Sets this <CODE>SOAPFault</CODE> object with the given
   fault actor.

   <P>The fault actor is the recipient in the message path who
   caused the fault to happen.</P>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>faultActor</CODE> - a <CODE>String</CODE>
     identifying the actor that caused this <CODE>
     SOAPFault</CODE> object
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></CODE> - if there was an error in
     adding the <CODE>faultActor</CODE> to the underlying XML
     tree.<DT><B>See Also:</B><DD><A HREF="../../../javax/xml/soap/SOAPFault.html#getFaultActor()"><CODE>getFaultActor()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="getFaultActor()"><!-- --></A><H3>
getFaultActor</H3>
<PRE>
public java.lang.String <B>getFaultActor</B>()</PRE>
<DL>
<DD>Gets the fault actor for this <CODE>SOAPFault</CODE>
 object.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>a <CODE>String</CODE> giving the actor in the message
     path that caused this <CODE>SOAPFault</CODE> object<DT><B>See Also:</B><DD><A HREF="../../../javax/xml/soap/SOAPFault.html#setFaultActor(java.lang.String)"><CODE>setFaultActor(java.lang.String)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="setFaultString(java.lang.String)"><!-- --></A><H3>
setFaultString</H3>
<PRE>
public void <B>setFaultString</B>(java.lang.String&nbsp;faultString)
                    throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Sets the fault string for this <CODE>SOAPFault</CODE>
 object to the given string.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>faultString</CODE> - a <CODE>String</CODE>
     giving an explanation of the fault
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></CODE> - if there was an error in
     adding the <CODE>faultString</CODE> to the underlying XML
     tree.<DT><B>See Also:</B><DD><A HREF="../../../javax/xml/soap/SOAPFault.html#getFaultString()"><CODE>getFaultString()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="getFaultString()"><!-- --></A><H3>
getFaultString</H3>
<PRE>
public java.lang.String <B>getFaultString</B>()</PRE>
<DL>
<DD>Gets the fault string for this <CODE>SOAPFault</CODE>
 object.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>a <CODE>String</CODE> giving an explanation of the
     fault</DL>
</DD>
</DL>
<HR>

<A NAME="getDetail()"><!-- --></A><H3>
getDetail</H3>
<PRE>
public <A HREF="../../../javax/xml/soap/Detail.html" title="interface in javax.xml.soap">Detail</A> <B>getDetail</B>()</PRE>
<DL>
<DD>Returns the detail element for this <CODE>SOAPFault</CODE>
   object.

   <P>A <CODE>Detail</CODE> object carries
   application-specific error information related to <CODE>
   SOAPBodyElement</CODE> objects.</P>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>a <CODE>Detail</CODE> object with
     application-specific error information</DL>
</DD>
</DL>
<HR>

<A NAME="addDetail()"><!-- --></A><H3>
addDetail</H3>
<PRE>
public <A HREF="../../../javax/xml/soap/Detail.html" title="interface in javax.xml.soap">Detail</A> <B>addDetail</B>()
                 throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Creates a <CODE>Detail</CODE> object and sets it as the
   <CODE>Detail</CODE> object for this <CODE>SOAPFault</CODE>
   object.

   <P>It is illegal to add a detail when the fault already
   contains a detail. Therefore, this method should be called
   only after the existing detail has been removed.</P>
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the new <CODE>Detail</CODE> object
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></CODE> - if this
     <CODE>SOAPFault</CODE> object already contains a valid
     <CODE>Detail</CODE> object</DL>
</DD>
</DL>
<HR>

<A NAME="setFaultCode(javax.xml.soap.Name)"><!-- --></A><H3>
setFaultCode</H3>
<PRE>
public void <B>setFaultCode</B>(<A HREF="../../../javax/xml/soap/Name.html" title="interface in javax.xml.soap">Name</A>&nbsp;name)
                  throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Sets this <code>SOAPFault</code> object with the given fault code.

 Fault codes, which give information about the fault, are defined in the
 SOAP 1.1 specification. A fault code is mandatory and must be of type
 <code>QName</code>. This method provides a convenient way to set a fault
 code. For example,

 <pre>
     SOAPEnvelope se = ...;
     // Create a qualified name in the SOAP namespace with a localName
     // of "Client".  Note that prefix parameter is optional and is null
     // here which causes the implementation to use an appropriate prefix.
     Name qname = se.createName("Client", null,
     SOAPConstants.URI_NS_SOAP_ENVELOPE);
     SOAPFault fault = ...;
     fault.setFaultCode(qname);

 It is preferable to use this method over setFaultCode(String).
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>name</CODE> - a <code>Name</code> object giving the fault code to be set.
              It must be namespace qualified.
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></CODE> - if there was an error in adding the
              <code>faultcode</code> element to the underlying XML tree</DL>
</DD>
</DL>
<HR>

<A NAME="getFaultCodeAsName()"><!-- --></A><H3>
getFaultCodeAsName</H3>
<PRE>
public <A HREF="../../../javax/xml/soap/Name.html" title="interface in javax.xml.soap">Name</A> <B>getFaultCodeAsName</B>()</PRE>
<DL>
<DD>Gets the mandatory SOAP 1.1 fault code for this <code>SOAPFault</code>
 object as a SAAJ <code>Name</code> object. The SOAP 1.1 specification
 requires the value of the "faultcode" element to be of type QName. This
 method returns the content of the element as a QName in the form of a
 SAAJ <code>Name</code> object. This method should be used instead of the
 <code>getFaultCode()</code> method since it allows applications to easily
 access the namespace name without additional parsing.
 <p>
 In the future, a QName object version of this method may also be added.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>a <code>Name</code> representing the faultcode</DL>
</DD>
</DL>
<HR>

<A NAME="setFaultString(java.lang.String, java.util.Locale)"><!-- --></A><H3>
setFaultString</H3>
<PRE>
public void <B>setFaultString</B>(java.lang.String&nbsp;faultString,
                           java.util.Locale&nbsp;locale)
                    throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Sets the fault string for this <code>SOAPFault</code> object to the given
 string and localized to the given locale.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>faultString</CODE> - a <code>String</code> giving an explanation of
              the fault<DD><CODE>locale</CODE> - a <code>Locale</code> object indicating the
              native language of the <code>faultString</code>
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></CODE> - if there was an error in adding the
              <code>faultString</code> to the underlying XML tree</DL>
</DD>
</DL>
<HR>

<A NAME="getFaultStringLocale()"><!-- --></A><H3>
getFaultStringLocale</H3>
<PRE>
public java.util.Locale <B>getFaultStringLocale</B>()</PRE>
<DL>
<DD>Returns the optional detail element for this <code>SOAPFault</code>
 object.
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>a <code>Locale</code> object indicating the native language of
              the fault string or <code>null</code> if no locale was
              specified</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/SOAPFault.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../javax/xml/soap/SOAPEnvelope.html" title="interface in javax.xml.soap"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../javax/xml/soap/SOAPFaultElement.html" title="interface in javax.xml.soap"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="SOAPFault.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>

</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;CONSTR&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>
Copyright © 2005 Apache Web Services Project. All Rights Reserved.
</BODY>
</HTML>
