<!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:43 PDT 2006 -->
<TITLE>
SOAPMessage (Axis API)
</TITLE>

<META NAME="keywords" CONTENT="javax.xml.soap.SOAPMessage class">

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

<SCRIPT type="text/javascript">
function windowTitle()
{
    parent.document.title="SOAPMessage (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/SOAPMessage.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/SOAPFactory.html" title="class in javax.xml.soap"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../javax/xml/soap/SOAPPart.html" title="class 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="SOAPMessage.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;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&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>
Class SOAPMessage</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../resources/inherit.gif" ALT="extended by"><B>javax.xml.soap.SOAPMessage</B>
</PRE>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../org/apache/axis/Message.html" title="class in org.apache.axis">Message</A></DD>
</DL>
<HR>
<DL>
<DT>public abstract class <B>SOAPMessage</B><DT>extends java.lang.Object</DL>

<P>
<P>The root class for all SOAP messages. As transmitted on the
 "wire", a SOAP message is an XML document or a MIME message
 whose first body part is an XML/SOAP document.</P>

 <P>A <CODE>SOAPMessage</CODE> object consists of a SOAP part
 and optionally one or more attachment parts. The SOAP part for
 a <CODE>SOAPMessage</CODE> object is a <CODE>SOAPPart</CODE>
 object, which contains information used for message routing and
 identification, and which can contain application-specific
 content. All data in the SOAP Part of a message must be in XML
 format.</P>

 <P>A new <CODE>SOAPMessage</CODE> object contains the following
 by default:</P>

 <UL>
  <LI>A <CODE>SOAPPart</CODE> object</LI>

  <LI>A <CODE>SOAPEnvelope</CODE> object</LI>

  <LI>A <CODE>SOAPBody</CODE> object</LI>

  <LI>A <CODE>SOAPHeader</CODE> object</LI>
 </UL>
 The SOAP part of a message can be retrieved by calling the
 method <CODE>SOAPMessage.getSOAPPart()</CODE>. The <CODE>
 SOAPEnvelope</CODE> object is retrieved from the <CODE>
 SOAPPart</CODE> object, and the <CODE>SOAPEnvelope</CODE>
 object is used to retrieve the <CODE>SOAPBody</CODE> and <CODE>
 SOAPHeader</CODE> objects.
 <PRE>
 SOAPPart sp = message.getSOAPPart();
 SOAPEnvelope se = sp.getEnvelope();
 SOAPBody sb = se.getBody();
 SOAPHeader sh = se.getHeader();
 </PRE>

 <P>In addition to the mandatory <CODE>SOAPPart</CODE> object, a
 <CODE>SOAPMessage</CODE> object may contain zero or more <CODE>
 AttachmentPart</CODE> objects, each of which contains
 application-specific data. The <CODE>SOAPMessage</CODE>
 interface provides methods for creating <CODE>
 AttachmentPart</CODE> objects and also for adding them to a
 <CODE>SOAPMessage</CODE> object. A party that has received a
 <CODE>SOAPMessage</CODE> object can examine its contents by
 retrieving individual attachment parts.</P>

 <P>Unlike the rest of a SOAP message, an attachment is not
 required to be in XML format and can therefore be anything from
 simple text to an image file. Consequently, any message content
 that is not in XML format must be in an <CODE>
 AttachmentPart</CODE> object.</P>

 <P>A <CODE>MessageFactory</CODE> object creates new <CODE>
 SOAPMessage</CODE> objects. If the <CODE>MessageFactory</CODE>
 object was initialized with a messaging Profile, it produces
 <CODE>SOAPMessage</CODE> objects that conform to that Profile.
 For example, a <CODE>SOAPMessage</CODE> object created by a
 <CODE>MessageFactory</CODE> object initialized with the ebXML
 Profile will have the appropriate ebXML headers.</P>
<P>

<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../javax/xml/soap/MessageFactory.html" title="class in javax.xml.soap"><CODE>MessageFactory</CODE></A>, 
<A HREF="../../../javax/xml/soap/AttachmentPart.html" title="class in javax.xml.soap"><CODE>AttachmentPart</CODE></A></DL>
<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>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#CHARACTER_SET_ENCODING">CHARACTER_SET_ENCODING</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies the character type encoding for the SOAP Message.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#WRITE_XML_DECLARATION">WRITE_XML_DECLARATION</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies whether the SOAP Message should contain an XML declaration.</TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TD COLSPAN=2><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#SOAPMessage()">SOAPMessage</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== 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>abstract &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#addAttachmentPart(javax.xml.soap.AttachmentPart)">addAttachmentPart</A></B>(<A HREF="../../../javax/xml/soap/AttachmentPart.html" title="class in javax.xml.soap">AttachmentPart</A>&nbsp;attachmentpart)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds the given <CODE>AttachmentPart</CODE> object to this
 <CODE>SOAPMessage</CODE> object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#countAttachments()">countAttachments</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets a count of the number of attachments in this
 message.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;<A HREF="../../../javax/xml/soap/AttachmentPart.html" title="class in javax.xml.soap">AttachmentPart</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#createAttachmentPart()">createAttachmentPart</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates a new empty <CODE>AttachmentPart</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/AttachmentPart.html" title="class in javax.xml.soap">AttachmentPart</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#createAttachmentPart(javax.activation.DataHandler)">createAttachmentPart</A></B>(javax.activation.DataHandler&nbsp;datahandler)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <CODE>AttachmentPart</CODE> object and
 populates it using the given <CODE>DataHandler</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/AttachmentPart.html" title="class in javax.xml.soap">AttachmentPart</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#createAttachmentPart(java.lang.Object, java.lang.String)">createAttachmentPart</A></B>(java.lang.Object&nbsp;content,
                     java.lang.String&nbsp;contentType)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Creates an <CODE>AttachmentPart</CODE> object and
 populates it with the specified data of the specified content
 type.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;java.util.Iterator</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#getAttachments()">getAttachments</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves all the <CODE>AttachmentPart</CODE> objects
 that are part of this <CODE>SOAPMessage</CODE> object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;java.util.Iterator</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#getAttachments(javax.xml.soap.MimeHeaders)">getAttachments</A></B>(<A HREF="../../../javax/xml/soap/MimeHeaders.html" title="class in javax.xml.soap">MimeHeaders</A>&nbsp;headers)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves all the <CODE>AttachmentPart</CODE> objects
 that have header entries that match the specified headers.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#getContentDescription()">getContentDescription</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves a description of this <CODE>SOAPMessage</CODE>
 object's content.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;<A HREF="../../../javax/xml/soap/MimeHeaders.html" title="class in javax.xml.soap">MimeHeaders</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#getMimeHeaders()">getMimeHeaders</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns all the transport-specific MIME headers for this
 <CODE>SOAPMessage</CODE> object in a transport-independent
 fashion.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.Object</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#getProperty(java.lang.String)">getProperty</A></B>(java.lang.String&nbsp;property)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Retrieves value of the specified property.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;<A HREF="../../../javax/xml/soap/SOAPBody.html" title="interface in javax.xml.soap">SOAPBody</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#getSOAPBody()">getSOAPBody</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the SOAP Body contained in this <code>SOAPMessage</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/SOAPHeader.html" title="interface in javax.xml.soap">SOAPHeader</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#getSOAPHeader()">getSOAPHeader</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the SOAP Header contained in this <code>SOAPMessage</code> object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;<A HREF="../../../javax/xml/soap/SOAPPart.html" title="class in javax.xml.soap">SOAPPart</A></CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#getSOAPPart()">getSOAPPart</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Gets the SOAP part of this <CODE>SOAPMessage</CODE> object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#removeAllAttachments()">removeAllAttachments</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all <CODE>AttachmentPart</CODE> objects that have
   been added to this <CODE>SOAPMessage</CODE> object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#saveChanges()">saveChanges</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Updates this <CODE>SOAPMessage</CODE> object with all the
   changes that have been made to it.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#saveRequired()">saveRequired</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Indicates whether this <CODE>SOAPMessage</CODE> object
 has had the method <CODE>saveChanges</CODE> called on
 it.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#setContentDescription(java.lang.String)">setContentDescription</A></B>(java.lang.String&nbsp;description)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sets the description of this <CODE>SOAPMessage</CODE>
 object's content with the given description.</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/SOAPMessage.html#setProperty(java.lang.String, java.lang.Object)">setProperty</A></B>(java.lang.String&nbsp;property,
            java.lang.Object&nbsp;value)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Associates the specified value with the specified property.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>abstract &nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../javax/xml/soap/SOAPMessage.html#writeTo(java.io.OutputStream)">writeTo</A></B>(java.io.OutputStream&nbsp;out)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Writes this <CODE>SOAPMessage</CODE> object to the given
   output stream.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TD><B>Methods inherited from class java.lang.Object</B></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

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

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

<A NAME="CHARACTER_SET_ENCODING"><!-- --></A><H3>
CHARACTER_SET_ENCODING</H3>
<PRE>
public static final java.lang.String <B>CHARACTER_SET_ENCODING</B></PRE>
<DL>
<DD>Specifies the character type encoding for the SOAP Message.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#javax.xml.soap.SOAPMessage.CHARACTER_SET_ENCODING">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="WRITE_XML_DECLARATION"><!-- --></A><H3>
WRITE_XML_DECLARATION</H3>
<PRE>
public static final java.lang.String <B>WRITE_XML_DECLARATION</B></PRE>
<DL>
<DD>Specifies whether the SOAP Message should contain an XML declaration.
<P>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#javax.xml.soap.SOAPMessage.WRITE_XML_DECLARATION">Constant Field Values</A></DL>
</DL>

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

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

<A NAME="SOAPMessage()"><!-- --></A><H3>
SOAPMessage</H3>
<PRE>
public <B>SOAPMessage</B>()</PRE>
<DL>
</DL>

<!-- ============ 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="getContentDescription()"><!-- --></A><H3>
getContentDescription</H3>
<PRE>
public abstract java.lang.String <B>getContentDescription</B>()</PRE>
<DL>
<DD>Retrieves a description of this <CODE>SOAPMessage</CODE>
 object's content.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>a <CODE>String</CODE> describing the content of this
     message or <CODE>null</CODE> if no description has been
     set<DT><B>See Also:</B><DD><A HREF="../../../javax/xml/soap/SOAPMessage.html#setContentDescription(java.lang.String)"><CODE>setContentDescription(java.lang.String)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="setContentDescription(java.lang.String)"><!-- --></A><H3>
setContentDescription</H3>
<PRE>
public abstract void <B>setContentDescription</B>(java.lang.String&nbsp;description)</PRE>
<DL>
<DD>Sets the description of this <CODE>SOAPMessage</CODE>
 object's content with the given description.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>description</CODE> - a <CODE>String</CODE>
     describing the content of this message<DT><B>See Also:</B><DD><A HREF="../../../javax/xml/soap/SOAPMessage.html#getContentDescription()"><CODE>getContentDescription()</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="getSOAPPart()"><!-- --></A><H3>
getSOAPPart</H3>
<PRE>
public abstract <A HREF="../../../javax/xml/soap/SOAPPart.html" title="class in javax.xml.soap">SOAPPart</A> <B>getSOAPPart</B>()</PRE>
<DL>
<DD>Gets the SOAP part of this <CODE>SOAPMessage</CODE> object.


   <P>If a <CODE>SOAPMessage</CODE> object contains one or
   more attachments, the SOAP Part must be the first MIME body
   part in the message.</P>
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the <CODE>SOAPPart</CODE> object for this <CODE>
     SOAPMessage</CODE> object</DL>
</DD>
</DL>
<HR>

<A NAME="removeAllAttachments()"><!-- --></A><H3>
removeAllAttachments</H3>
<PRE>
public abstract void <B>removeAllAttachments</B>()</PRE>
<DL>
<DD>Removes all <CODE>AttachmentPart</CODE> objects that have
   been added to this <CODE>SOAPMessage</CODE> object.

   <P>This method does not touch the SOAP part.</P>
<P>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="countAttachments()"><!-- --></A><H3>
countAttachments</H3>
<PRE>
public abstract int <B>countAttachments</B>()</PRE>
<DL>
<DD>Gets a count of the number of attachments in this
 message. This count does not include the SOAP part.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the number of <CODE>AttachmentPart</CODE> objects
     that are part of this <CODE>SOAPMessage</CODE>
     object</DL>
</DD>
</DL>
<HR>

<A NAME="getAttachments()"><!-- --></A><H3>
getAttachments</H3>
<PRE>
public abstract java.util.Iterator <B>getAttachments</B>()</PRE>
<DL>
<DD>Retrieves all the <CODE>AttachmentPart</CODE> objects
 that are part of this <CODE>SOAPMessage</CODE> object.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>an iterator over all the attachments in this
     message</DL>
</DD>
</DL>
<HR>

<A NAME="getAttachments(javax.xml.soap.MimeHeaders)"><!-- --></A><H3>
getAttachments</H3>
<PRE>
public abstract java.util.Iterator <B>getAttachments</B>(<A HREF="../../../javax/xml/soap/MimeHeaders.html" title="class in javax.xml.soap">MimeHeaders</A>&nbsp;headers)</PRE>
<DL>
<DD>Retrieves all the <CODE>AttachmentPart</CODE> objects
 that have header entries that match the specified headers.
 Note that a returned attachment could have headers in
 addition to those specified.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>headers</CODE> - a <CODE>MimeHeaders</CODE>
     object containing the MIME headers for which to
     search
<DT><B>Returns:</B><DD>an iterator over all attachments that have a header
     that matches one of the given headers</DL>
</DD>
</DL>
<HR>

<A NAME="addAttachmentPart(javax.xml.soap.AttachmentPart)"><!-- --></A><H3>
addAttachmentPart</H3>
<PRE>
public abstract void <B>addAttachmentPart</B>(<A HREF="../../../javax/xml/soap/AttachmentPart.html" title="class in javax.xml.soap">AttachmentPart</A>&nbsp;attachmentpart)</PRE>
<DL>
<DD>Adds the given <CODE>AttachmentPart</CODE> object to this
 <CODE>SOAPMessage</CODE> object. An <CODE>
 AttachmentPart</CODE> object must be created before it can be
 added to a message.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>attachmentpart</CODE> - an <CODE>
     AttachmentPart</CODE> object that is to become part of
     this <CODE>SOAPMessage</CODE> object
<DT><B>Throws:</B>
<DD><CODE>java.lang.IllegalArgumentException</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="createAttachmentPart()"><!-- --></A><H3>
createAttachmentPart</H3>
<PRE>
public abstract <A HREF="../../../javax/xml/soap/AttachmentPart.html" title="class in javax.xml.soap">AttachmentPart</A> <B>createAttachmentPart</B>()</PRE>
<DL>
<DD>Creates a new empty <CODE>AttachmentPart</CODE> object.
 Note that the method <CODE>addAttachmentPart</CODE> must be
 called with this new <CODE>AttachmentPart</CODE> object as
 the parameter in order for it to become an attachment to this
 <CODE>SOAPMessage</CODE> object.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>a new <CODE>AttachmentPart</CODE> object that can be
     populated and added to this <CODE>SOAPMessage</CODE>
     object</DL>
</DD>
</DL>
<HR>

<A NAME="createAttachmentPart(javax.activation.DataHandler)"><!-- --></A><H3>
createAttachmentPart</H3>
<PRE>
public <A HREF="../../../javax/xml/soap/AttachmentPart.html" title="class in javax.xml.soap">AttachmentPart</A> <B>createAttachmentPart</B>(javax.activation.DataHandler&nbsp;datahandler)</PRE>
<DL>
<DD>Creates an <CODE>AttachmentPart</CODE> object and
 populates it using the given <CODE>DataHandler</CODE>
 object.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>datahandler</CODE> - the <CODE>
     javax.activation.DataHandler</CODE> object that will
     generate the content for this <CODE>SOAPMessage</CODE>
     object
<DT><B>Returns:</B><DD>a new <CODE>AttachmentPart</CODE> object that
     contains data generated by the given <CODE>
     DataHandler</CODE> object
<DT><B>Throws:</B>
<DD><CODE>java.lang.IllegalArgumentException</CODE> - if
     there was a problem with the specified <CODE>
     DataHandler</CODE> object<DT><B>See Also:</B><DD><CODE>DataHandler</CODE>, 
<CODE>DataContentHandler</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="getMimeHeaders()"><!-- --></A><H3>
getMimeHeaders</H3>
<PRE>
public abstract <A HREF="../../../javax/xml/soap/MimeHeaders.html" title="class in javax.xml.soap">MimeHeaders</A> <B>getMimeHeaders</B>()</PRE>
<DL>
<DD>Returns all the transport-specific MIME headers for this
 <CODE>SOAPMessage</CODE> object in a transport-independent
 fashion.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>a <CODE>MimeHeaders</CODE> object containing the
     <CODE>MimeHeader</CODE> objects</DL>
</DD>
</DL>
<HR>

<A NAME="createAttachmentPart(java.lang.Object, java.lang.String)"><!-- --></A><H3>
createAttachmentPart</H3>
<PRE>
public <A HREF="../../../javax/xml/soap/AttachmentPart.html" title="class in javax.xml.soap">AttachmentPart</A> <B>createAttachmentPart</B>(java.lang.Object&nbsp;content,
                                           java.lang.String&nbsp;contentType)</PRE>
<DL>
<DD>Creates an <CODE>AttachmentPart</CODE> object and
 populates it with the specified data of the specified content
 type.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>content</CODE> - an <CODE>Object</CODE>
     containing the content for this <CODE>SOAPMessage</CODE>
     object<DD><CODE>contentType</CODE> - a <CODE>String</CODE>
     object giving the type of content; examples are
     "text/xml", "text/plain", and "image/jpeg"
<DT><B>Returns:</B><DD>a new <CODE>AttachmentPart</CODE> object that
     contains the given data
<DT><B>Throws:</B>
<DD><CODE>java.lang.IllegalArgumentException</CODE> - if the contentType does not match the type of the content
     object, or if there was no <CODE>
     DataContentHandler</CODE> object for the given content
     object<DT><B>See Also:</B><DD><CODE>DataHandler</CODE>, 
<CODE>DataContentHandler</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="saveChanges()"><!-- --></A><H3>
saveChanges</H3>
<PRE>
public abstract void <B>saveChanges</B>()
                          throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Updates this <CODE>SOAPMessage</CODE> object with all the
   changes that have been made to it. This method is called
   automatically when a message is sent or written to by the
   methods <CODE>ProviderConnection.send</CODE>, <CODE>
   SOAPConnection.call</CODE>, or <CODE>
   SOAPMessage.writeTo</CODE>. However, if changes are made to
   a message that was received or to one that has already been
   sent, the method <CODE>saveChanges</CODE> needs to be
   called explicitly in order to save the changes. The method
   <CODE>saveChanges</CODE> also generates any changes that
   can be read back (for example, a MessageId in profiles that
   support a message id). All MIME headers in a message that
   is created for sending purposes are guaranteed to have
   valid values only after <CODE>saveChanges</CODE> has been
   called.

   <P>In addition, this method marks the point at which the
   data from all constituent <CODE>AttachmentPart</CODE>
   objects are pulled into the message.</P>
<P>
<DD><DL>

<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 a problem saving changes to this message.</DL>
</DD>
</DL>
<HR>

<A NAME="saveRequired()"><!-- --></A><H3>
saveRequired</H3>
<PRE>
public abstract boolean <B>saveRequired</B>()</PRE>
<DL>
<DD>Indicates whether this <CODE>SOAPMessage</CODE> object
 has had the method <CODE>saveChanges</CODE> called on
 it.
<P>
<DD><DL>

<DT><B>Returns:</B><DD><CODE>true</CODE> if <CODE>saveChanges</CODE> has
     been called on this message at least once; <CODE>
     false</CODE> otherwise.</DL>
</DD>
</DL>
<HR>

<A NAME="writeTo(java.io.OutputStream)"><!-- --></A><H3>
writeTo</H3>
<PRE>
public abstract void <B>writeTo</B>(java.io.OutputStream&nbsp;out)
                      throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A>,
                             java.io.IOException</PRE>
<DL>
<DD>Writes this <CODE>SOAPMessage</CODE> object to the given
   output stream. The externalization format is as defined by
   the SOAP 1.1 with Attachments specification.

   <P>If there are no attachments, just an XML stream is
   written out. For those messages that have attachments,
   <CODE>writeTo</CODE> writes a MIME-encoded byte stream.</P>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>out</CODE> - the <CODE>OutputStream</CODE>
     object to which this <CODE>SOAPMessage</CODE> object will
     be written
<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 a problem in
     externalizing this SOAP message
<DD><CODE>java.io.IOException</CODE> - if an I/O error
     occurs</DL>
</DD>
</DL>
<HR>

<A NAME="getSOAPBody()"><!-- --></A><H3>
getSOAPBody</H3>
<PRE>
public <A HREF="../../../javax/xml/soap/SOAPBody.html" title="interface in javax.xml.soap">SOAPBody</A> <B>getSOAPBody</B>()
                     throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Gets the SOAP Body contained in this <code>SOAPMessage</code> object.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the <code>SOAPBody</code> object contained by this
              <code>SOAPMessage</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 the SOAP Body does not exist or cannot be
              retrieved</DL>
</DD>
</DL>
<HR>

<A NAME="getSOAPHeader()"><!-- --></A><H3>
getSOAPHeader</H3>
<PRE>
public <A HREF="../../../javax/xml/soap/SOAPHeader.html" title="interface in javax.xml.soap">SOAPHeader</A> <B>getSOAPHeader</B>()
                         throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Gets the SOAP Header contained in this <code>SOAPMessage</code> object.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the <code>SOAPHeader</code> object contained by this
              <code>SOAPMessage</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 the SOAP Header does not exist or cannot be
              retrieved</DL>
</DD>
</DL>
<HR>

<A NAME="setProperty(java.lang.String, java.lang.Object)"><!-- --></A><H3>
setProperty</H3>
<PRE>
public void <B>setProperty</B>(java.lang.String&nbsp;property,
                        java.lang.Object&nbsp;value)
                 throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Associates the specified value with the specified property. If there was
 already a value associated with this property, the old value is replaced.
 <p>
 The valid property names include <code>WRITE_XML_DECLARATION</code> and
 <code>CHARACTER_SET_ENCODING</code>. All of these standard SAAJ
 properties are prefixed by "javax.xml.soap". Vendors may also add
 implementation specific properties. These properties must be prefixed
 with package names that are unique to the vendor.
 <p>
 Setting the property <code>WRITE_XML_DECLARATION</code> to
 <code>"true"</code> will cause an XML Declaration to be written out at
 the start of the SOAP message. The default value of "false" suppresses
 this declaration.
 <p>
 The property <code>CHARACTER_SET_ENCODING</code> defaults to the value
 <code>"utf-8"</code> which causes the SOAP message to be encoded using
 UTF-8. Setting <code>CHARACTER_SET_ENCODING</code> to
 <code>"utf-16"</code> causes the SOAP message to be encoded using UTF-16.
 <p>
 Some implementations may allow encodings in addition to UTF-8 and UTF-16.
 Refer to your vendor's documentation for details.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>property</CODE> - the property with which the specified value is to be
              associated<DD><CODE>value</CODE> - the value to be associated with the specified property
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></CODE> - if the property name is not recognized</DL>
</DD>
</DL>
<HR>

<A NAME="getProperty(java.lang.String)"><!-- --></A><H3>
getProperty</H3>
<PRE>
public java.lang.Object <B>getProperty</B>(java.lang.String&nbsp;property)
                             throws <A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></PRE>
<DL>
<DD>Retrieves value of the specified property.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>property</CODE> - the name of the property to retrieve
<DT><B>Returns:</B><DD>the value of the property or <code>null</code> if no such
              property exists
<DT><B>Throws:</B>
<DD><CODE><A HREF="../../../javax/xml/soap/SOAPException.html" title="class in javax.xml.soap">SOAPException</A></CODE> - if the property name is not recognized</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/SOAPMessage.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/SOAPFactory.html" title="class in javax.xml.soap"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../javax/xml/soap/SOAPPart.html" title="class 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="SOAPMessage.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;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&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>
