You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2011/05/12 10:30:03 UTC

svn commit: r1102203 - in /geronimo/bundles/trunk: axiom-all/ axiom-all/src/main/java/ axis2-saaj/ axis2-saaj/src/main/java/ axis2-saaj/src/main/java/org/ axis2-saaj/src/main/java/org/apache/ axis2-saaj/src/main/java/org/apache/axis2/ axis2-saaj/src/ma...

Author: xuhaihong
Date: Thu May 12 08:30:02 2011
New Revision: 1102203

URL: http://svn.apache.org/viewvc?rev=1102203&view=rev
Log:
Remove the workaround in axiom-all bundle, and try the patch of AXIS2-5001

Added:
    geronimo/bundles/trunk/axis2-saaj/src/main/java/
    geronimo/bundles/trunk/axis2-saaj/src/main/java/org/
    geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/
    geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/axis2/
    geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/axis2/saaj/
    geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/axis2/saaj/SOAPMessageImpl.java   (with props)
Removed:
    geronimo/bundles/trunk/axiom-all/src/main/java/
Modified:
    geronimo/bundles/trunk/axiom-all/pom.xml
    geronimo/bundles/trunk/axis2-saaj/pom.xml

Modified: geronimo/bundles/trunk/axiom-all/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/bundles/trunk/axiom-all/pom.xml?rev=1102203&r1=1102202&r2=1102203&view=diff
==============================================================================
--- geronimo/bundles/trunk/axiom-all/pom.xml (original)
+++ geronimo/bundles/trunk/axiom-all/pom.xml Thu May 12 08:30:02 2011
@@ -174,10 +174,6 @@
                         <Export-Package>org.apache.axiom*;version="${pkgVersion}";-split-package:=merge-first</Export-Package>
                         <Import-Package>org.jaxen*;resolution:=optional,*</Import-Package>
                         <!--<_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>-->
-                        <Include-Resource>
-                           {maven-resources},
-                           org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.class=target/classes/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.class
-                        </Include-Resource>   
                     </instructions>
                 </configuration>
             </plugin>

Modified: geronimo/bundles/trunk/axis2-saaj/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/bundles/trunk/axis2-saaj/pom.xml?rev=1102203&r1=1102202&r2=1102203&view=diff
==============================================================================
--- geronimo/bundles/trunk/axis2-saaj/pom.xml (original)
+++ geronimo/bundles/trunk/axis2-saaj/pom.xml Thu May 12 08:30:02 2011
@@ -64,6 +64,12 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        
+        <dependency>
+            <groupId>org.apache.geronimo.bundles</groupId>
+            <artifactId>axis2</artifactId>
+            <version>1.7.0_1-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 
     <build>
@@ -83,6 +89,10 @@
                            META-INF;-split-package:=merge-first,
                            META-INF.services;-split-package:=merge-first,
                         </Private-Package>
+                        <Include-Resource>
+                           {maven-resources},
+                           org/apache/axis2/saaj/SOAPMessageImpl.class=target/classes/org/apache/axis2/saaj/SOAPMessageImpl.class
+                        </Include-Resource>
                         <!--<_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>-->
                     </instructions>
                 </configuration>

Added: geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/axis2/saaj/SOAPMessageImpl.java
URL: http://svn.apache.org/viewvc/geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/axis2/saaj/SOAPMessageImpl.java?rev=1102203&view=auto
==============================================================================
--- geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/axis2/saaj/SOAPMessageImpl.java (added)
+++ geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/axis2/saaj/SOAPMessageImpl.java Thu May 12 08:30:02 2011
@@ -0,0 +1,511 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.saaj;
+
+import org.apache.axiom.attachments.Attachments;
+import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.om.impl.OMMultipartWriter;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
+import org.apache.axiom.soap.impl.dom.soap12.SOAP12Factory;
+import org.apache.axis2.saaj.util.SAAJUtil;
+import org.apache.axis2.transport.http.HTTPConstants;
+
+import javax.xml.soap.AttachmentPart;
+import javax.xml.soap.MimeHeader;
+import javax.xml.soap.MimeHeaders;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPHeader;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.SOAPPart;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+
+public class SOAPMessageImpl extends SOAPMessage {
+
+    private static final boolean SAAJ_SOAPMESSAGE_GETSOAPHEADER_STRICT = Boolean.getBoolean("saaj.soapmessage.getsoapheader.strict");
+    
+    private SOAPPart soapPart;
+    private Collection<AttachmentPart> attachmentParts = new ArrayList<AttachmentPart>();
+    private MimeHeaders mimeHeaders;
+
+    private Map<String,Object> props = new Hashtable<String,Object>();
+    private boolean saveRequired;
+
+    public SOAPMessageImpl(SOAPEnvelopeImpl soapEnvelope) {
+        this.mimeHeaders = new MimeHeaders();
+        if (soapEnvelope.getOMFactory() instanceof SOAP11Factory) {
+            this.mimeHeaders.addHeader("content-type", HTTPConstants.MEDIA_TYPE_TEXT_XML);
+        } else if (soapEnvelope.getOMFactory() instanceof SOAP12Factory) {
+            this.mimeHeaders.addHeader("content-type",
+                    HTTPConstants.MEDIA_TYPE_APPLICATION_SOAP_XML);
+        }
+        soapPart = new SOAPPartImpl(this, soapEnvelope);
+    }
+
+    public SOAPMessageImpl(InputStream inputstream, MimeHeaders mimeHeaders, boolean processMTOM)
+            throws SOAPException {
+        String contentType = null;
+        String tmpContentType = "";
+        if (mimeHeaders != null) {
+            String contentTypes[] = mimeHeaders.getHeader(HTTPConstants.CONTENT_TYPE);
+            if (contentTypes != null && contentTypes.length > 0) {
+                tmpContentType = contentTypes[0];
+                contentType = SAAJUtil.normalizeContentType(tmpContentType);
+            }
+        }
+        if ("multipart/related".equals(contentType)) {
+            try {
+                Attachments attachments =
+                        new Attachments(inputstream, tmpContentType, false, "", "");
+                
+                // Axiom doesn't give us access to the MIME headers of the individual
+                // parts of the SOAP message package. We need to reconstruct them from
+                // the available information.
+                MimeHeaders soapPartHeaders = new MimeHeaders();
+                soapPartHeaders.addHeader(HTTPConstants.CONTENT_TYPE,
+                        attachments.getSOAPPartContentType());
+                String soapPartContentId = attachments.getSOAPPartContentID();
+                soapPartHeaders.addHeader("Content-ID", "<" + soapPartContentId + ">");
+                
+                soapPart = new SOAPPartImpl(this, attachments.getSOAPPartInputStream(),
+                        soapPartHeaders, processMTOM ? attachments : null);
+                
+                for (String contentId : attachments.getAllContentIDs()) {
+                    if (!contentId.equals(soapPartContentId)) {
+                        AttachmentPart ap =
+                                createAttachmentPart(attachments.getDataHandler(contentId));
+                        ap.setContentId("<" + contentId + ">");
+                        attachmentParts.add(ap);
+                    }
+                }
+            } catch (OMException e) {
+                throw new SOAPException(e);
+            }
+        } else {
+            initCharsetEncodingFromContentType(tmpContentType);
+            soapPart = new SOAPPartImpl(this, inputstream, mimeHeaders, null);
+        }
+
+        this.mimeHeaders = (mimeHeaders == null) ?
+                new MimeHeaders() :
+                SAAJUtil.copyMimeHeaders(mimeHeaders);
+    }
+
+    /**
+     * Retrieves a description of this <CODE>SOAPMessage</CODE> object's content.
+     *
+     * @return a <CODE>String</CODE> describing the content of this message or <CODE>null</CODE> if
+     *         no description has been set
+     * @see #setContentDescription(String) setContentDescription(java.lang.String)
+     */
+    public String getContentDescription() {
+        String values[] = mimeHeaders.getHeader(HTTPConstants.HEADER_CONTENT_DESCRIPTION);
+        if (values != null && values.length > 0) {
+            return values[0];
+        }
+        return null;
+    }
+
+    /**
+     * Sets the description of this <CODE>SOAPMessage</CODE> object's content with the given
+     * description.
+     *
+     * @param description a <CODE>String</CODE> describing the content of this message
+     * @see #getContentDescription() getContentDescription()
+     */
+    public void setContentDescription(String description) {
+        mimeHeaders.setHeader(HTTPConstants.HEADER_CONTENT_DESCRIPTION, description);
+    }
+
+    /**
+     * Gets the SOAP part of this <CODE>SOAPMessage</CODE> object.
+     * <p/>
+     * <p/>
+     * <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>
+     *
+     * @return the <CODE>SOAPPart</CODE> object for this <CODE> SOAPMessage</CODE> object
+     */
+    public SOAPPart getSOAPPart() {
+        return soapPart;
+    }
+
+    /**
+     * Removes all <CODE>AttachmentPart</CODE> objects that have been added to this
+     * <CODE>SOAPMessage</CODE> object.
+     * <p/>
+     * <P>This method does not touch the SOAP part.</P>
+     */
+    public void removeAllAttachments() {
+        attachmentParts.clear();
+    }
+
+    /**
+     * Gets a count of the number of attachments in this message. This count does not include the
+     * SOAP part.
+     *
+     * @return the number of <CODE>AttachmentPart</CODE> objects that are part of this
+     *         <CODE>SOAPMessage</CODE> object
+     */
+    public int countAttachments() {
+        return attachmentParts.size();
+    }
+
+    /**
+     * Retrieves all the <CODE>AttachmentPart</CODE> objects that are part of this
+     * <CODE>SOAPMessage</CODE> object.
+     *
+     * @return an iterator over all the attachments in this message
+     */
+    public Iterator getAttachments() {
+        return attachmentParts.iterator();
+    }
+
+    /**
+     * Retrieves all the AttachmentPart objects that have header entries that match the specified
+     * headers. Note that a returned attachment could have headers in addition to those specified.
+     *
+     * @param headers a {@link javax.xml.soap.MimeHeaders} object containing the MIME headers for
+     *                which to search
+     * @return an iterator over all attachments({@link javax.xml.soap.AttachmentPart}) that have a
+     *         header that matches one of the given headers
+     */
+    public Iterator getAttachments(javax.xml.soap.MimeHeaders headers) {
+        Collection<AttachmentPart> matchingAttachmentParts = new ArrayList<AttachmentPart>();
+        Iterator iterator = getAttachments();
+        {
+            AttachmentPartImpl part;
+            while (iterator.hasNext()) {
+                part = (AttachmentPartImpl)iterator.next();
+                if (part.matches(headers)) {
+                    matchingAttachmentParts.add(part);
+                }
+            }
+        }
+        return matchingAttachmentParts.iterator();
+    }
+
+    /**
+     * 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.
+     *
+     * @param attachmentPart an <CODE> AttachmentPart</CODE> object that is to become part of this
+     *                       <CODE>SOAPMessage</CODE> object
+     * @throws IllegalArgumentException
+     *
+     */
+    public void addAttachmentPart(AttachmentPart attachmentPart) {
+        if (attachmentPart != null) {
+            attachmentParts.add(attachmentPart);
+            mimeHeaders.setHeader(HTTPConstants.CONTENT_TYPE, "multipart/related");
+        }
+    }
+
+    /**
+     * 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.
+     *
+     * @return a new <CODE>AttachmentPart</CODE> object that can be populated and added to this
+     *         <CODE>SOAPMessage</CODE> object
+     */
+    public AttachmentPart createAttachmentPart() {
+        return new AttachmentPartImpl();
+    }
+
+    /**
+     * Returns all the transport-specific MIME headers for this <CODE>SOAPMessage</CODE> object in a
+     * transport-independent fashion.
+     *
+     * @return a <CODE>MimeHeaders</CODE> object containing the <CODE>MimeHeader</CODE> objects
+     */
+    public javax.xml.soap.MimeHeaders getMimeHeaders() {
+        return mimeHeaders;
+    }
+
+    /**
+     * 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/>
+     * <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>
+     *
+     * @throws SOAPException if there was a problem saving changes to this message.
+     */
+    public void saveChanges() throws SOAPException {
+        saveRequired = false;
+        // TODO not sure of the implementation
+    }
+
+    public void setSaveRequired() {
+        this.saveRequired = true;
+    }
+
+    /**
+     * Indicates whether this <CODE>SOAPMessage</CODE> object has had the method {@link
+     * #saveChanges()} called on it.
+     *
+     * @return <CODE>true</CODE> if <CODE>saveChanges</CODE> has been called on this message at
+     *         least once; <CODE> false</CODE> otherwise.
+     */
+    public boolean saveRequired() {
+        return saveRequired;
+    }
+
+    /**
+     * 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/>
+     * <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>
+     *
+     * @param out the <CODE>OutputStream</CODE> object to which this <CODE>SOAPMessage</CODE> object
+     *            will be written
+     * @throws SOAPException if there was a problem in externalizing this SOAP message
+     * @throws IOException   if an I/O error occurs
+     */
+    public void writeTo(OutputStream out) throws SOAPException, IOException {
+        try {
+            OMOutputFormat format = new OMOutputFormat();
+            String enc = (String)getProperty(CHARACTER_SET_ENCODING);
+            format.setCharSetEncoding(enc != null ? enc : OMOutputFormat.DEFAULT_CHAR_SET_ENCODING);
+            String writeXmlDecl = (String)getProperty(WRITE_XML_DECLARATION);
+            if (writeXmlDecl == null || writeXmlDecl.equals("false")) {
+
+                //SAAJ default case doesn't send XML decl
+                format.setIgnoreXMLDeclaration(true);
+            }
+
+            SOAPEnvelope envelope = ((SOAPEnvelopeImpl)soapPart.getEnvelope()).getOMEnvelope();
+            if (attachmentParts.isEmpty()) {
+                envelope.serialize(out, format);
+            } else {
+                format.setSOAP11(((SOAPEnvelopeImpl)soapPart.getEnvelope()).getOMFactory()
+                        instanceof SOAP11Factory);
+                OMMultipartWriter mpw = new OMMultipartWriter(out, format);
+                OutputStream rootPartOutputStream = mpw.writeRootPart();
+                envelope.serialize(rootPartOutputStream);
+                rootPartOutputStream.close();
+                for (AttachmentPart ap : attachmentParts) {
+                    mpw.writePart(ap.getDataHandler(), ap.getContentId());
+                }
+                mpw.complete();
+            }
+            saveChanges();
+        } catch (Exception e) {
+            throw new SOAPException(e);
+        }
+    }
+
+    /**
+     * 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.
+     *
+     * @param property the property with which the specified value is to be associated
+     * @param value    the value to be associated with the specified property
+     */
+    public void setProperty(String property, Object value) {
+        props.put(property, value);
+    }
+
+    /**
+     * Retrieves value of the specified property.
+     *
+     * @param property the name of the property to retrieve
+     * @return the value of the property or <code>null</code> if no such property exists
+     * @throws SOAPException if the property name is not recognized
+     */
+    public Object getProperty(String property) throws SOAPException {
+        return props.get(property);
+    }
+
+    /**
+     * Returns an AttachmentPart object that is associated with an attachment that is referenced by
+     * this SOAPElement or null if no such attachment exists. References can be made via an href
+     * attribute as described in SOAP Messages with Attachments (http://www.w3.org/TR/SOAPattachments#SOAPReferenceToAttachements)
+     * , or via a single Text child node containing a URI as described in the WS-I Attachments
+     * Profile 1.0 for elements of schema type ref:swaRef(ref:swaRef (http://www.wsi.org/Profiles/AttachmentsProfile-1.0-2004-08-24.html")
+     * ). These two mechanisms must be supported. The support for references via href attribute also
+     * implies that this method should also be supported on an element that is an xop:Include
+     * element (XOP (http://www.w3.org/2000/xp/Group/3/06/Attachments/XOP.html) ). other reference
+     * mechanisms may be supported by individual implementations of this standard. Contact your
+     * vendor for details.
+     *
+     * @param element - The SOAPElement containing the reference to an Attachment
+     * @return the referenced AttachmentPart or null if no such AttachmentPart exists or no
+     *         reference can be found in this SOAPElement.
+     * @throws SOAPException - if there is an error in the attempt to access the attachment
+     */
+    public AttachmentPart getAttachment(SOAPElement soapelement) throws SOAPException {
+        //TODO read strings from constants
+        Iterator iterator = getAttachments();
+        {
+            AttachmentPartImpl attachmentPart;
+            while (iterator.hasNext()) {
+                attachmentPart = (AttachmentPartImpl)iterator.next();
+                String[] contentIds = attachmentPart.getMimeHeader("Content-Id");
+
+                //References can be made via an href attribute as described in SOAP Messages
+                //with Attachments or via a single Text child node containing a URI
+                String reference = soapelement.getAttribute("href");
+                if (reference == null || reference.trim().length() == 0) {
+                    reference = soapelement.getValue();
+                    if (reference == null || reference.trim().length() == 0) {
+                        return null;
+                    }
+                }
+
+                for (int a = 0; a < contentIds.length; a++) {
+                    //eg: cid:gifImage scenario
+                    String idPart = reference.substring(reference.indexOf(":") + 1);
+                    idPart = "<" + idPart + ">";
+                    if (idPart.equals(contentIds[a])) {
+                        return attachmentPart;
+                    }
+                }
+
+                String[] contentLocations = attachmentPart.getMimeHeader("Content-Location");
+                if (!(contentLocations == null)) {
+                    //uri scenario
+                    for (int b = 0; b < contentLocations.length; b++) {
+                        if (reference.equals(contentLocations[b])) {
+                            return attachmentPart;
+                        }
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Removes all the AttachmentPart objects that have header entries that match the specified
+     * headers. Note that the removed attachment could have headers in addition to those specified.
+     *
+     * @param headers - a MimeHeaders object containing the MIME headers for which to search
+     * @since SAAJ 1.3
+     */
+    public void removeAttachments(MimeHeaders headers) {
+        Collection<AttachmentPart> newAttachmentParts = new ArrayList<AttachmentPart>();
+        for (AttachmentPart attachmentPart : attachmentParts) {
+            //Get all the headers
+            for (Iterator iterator = headers.getAllHeaders(); iterator.hasNext();) {
+                MimeHeader mimeHeader = (MimeHeader)iterator.next();
+                String[] headerValues = attachmentPart.getMimeHeader(mimeHeader.getName());
+                //if values for this header name, do not remove it
+                if (headerValues.length != 0) {
+                    if (!(headerValues[0].equals(mimeHeader.getValue()))) {
+                        newAttachmentParts.add(attachmentPart);
+                    }
+                }
+            }
+        }
+        attachmentParts.clear();
+        this.attachmentParts = newAttachmentParts;
+    }
+
+    /**
+     * Gets the SOAP Header contained in this <code>SOAPMessage</code> object.
+     *
+     * @return the <code>SOAPHeader</code> object contained by this <code>SOAPMessage</code> object
+     * @throws javax.xml.soap.SOAPException if the SOAP Header does not exist or cannot be
+     *                                      retrieved
+     */
+    public SOAPHeader getSOAPHeader() throws SOAPException {
+        SOAPHeader soapHeader = this.soapPart.getEnvelope().getHeader();
+        if (soapHeader == null && SAAJ_SOAPMESSAGE_GETSOAPHEADER_STRICT) {
+            throw new SOAPException("No SOAP header exists in the message");
+        }
+        return soapHeader;
+    }
+
+    /**
+     * Gets the SOAP Body contained in this <code>SOAPMessage</code> object.
+     *
+     * @return the <code>SOAPBody</code> object contained by this <code>SOAPMessage</code> object
+     * @throws javax.xml.soap.SOAPException if the SOAP Body does not exist or cannot be retrieved
+     */
+    public SOAPBody getSOAPBody() throws SOAPException {
+        return this.soapPart.getEnvelope().getBody();
+    }
+
+    /**
+     * Set the character encoding based on the <code>contentType</code> parameter
+     *
+     * @param contentType
+     */
+    private void initCharsetEncodingFromContentType(final String contentType) {
+        if (contentType != null) {
+            int delimiterIndex = contentType.lastIndexOf("charset");
+            if (delimiterIndex > 0) {
+                String charsetPart = contentType.substring(delimiterIndex);
+                int charsetIndex = charsetPart.indexOf('=');
+                String charset = charsetPart.substring(charsetIndex + 1).trim();
+                if ((charset.startsWith("\"") || charset.startsWith("\'"))) {
+                    charset = charset.substring(1, charset.length());
+                }
+                if ((charset.endsWith("\"") || charset.endsWith("\'"))) {
+                    charset = charset.substring(0, charset.length() - 1);
+                }
+                int index = charset.indexOf(';');
+                if (index != -1) {
+                    charset = charset.substring(0, index);
+                }
+                setProperty(SOAPMessage.CHARACTER_SET_ENCODING, charset);
+            }
+        }
+    }
+}

Propchange: geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/axis2/saaj/SOAPMessageImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/axis2/saaj/SOAPMessageImpl.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: geronimo/bundles/trunk/axis2-saaj/src/main/java/org/apache/axis2/saaj/SOAPMessageImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain