You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2006/12/14 01:29:24 UTC

svn commit: r486906 - in /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2: client/ transport/ transport/http/ transport/http/util/ transport/jms/ transport/local/ transport/mail/ transport/mail/server/ transport/tcp/ util/

Author: dims
Date: Wed Dec 13 16:29:24 2006
New Revision: 486906

URL: http://svn.apache.org/viewvc?view=rev&rev=486906
Log:
cleanup creation of all the builders, consolidate it in a helper class called Builder, this is preparation to introduce BuilderSelector

Added:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Builder.java
Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/client/Stub.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/util/RESTUtil.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSUtils.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/server/MailSorter.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/tcp/TCPWorker.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/client/Stub.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/client/Stub.java?view=diff&rev=486906&r1=486905&r2=486906
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/client/Stub.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/client/Stub.java Wed Dec 13 16:29:24 2006
@@ -17,14 +17,7 @@
 
 package org.apache.axis2.client;
 
-import java.util.ArrayList;
-
-import javax.xml.stream.XMLStreamReader;
-
 import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.impl.llom.factory.OMXMLBuilderFactory;
 import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
@@ -34,6 +27,8 @@
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.i18n.Messages;
 
+import java.util.ArrayList;
+
 /**
  * Base class for generated client stubs. This defines several client API
  * (<code>public</code>) methods shared between all types of stubs, along with
@@ -80,20 +75,6 @@
      */
     protected static SOAPEnvelope createEnvelope(Options options) throws SOAPProcessingException {
         return getFactory(options.getSoapVersionURI()).getDefaultEnvelope();
-    }
-
-    /**
-     * Read a root element from the parser.
-     * TODO generated stub code should use this method
-     * 
-     * @param reader
-     * @return root element
-     */
-    protected static OMElement getElementFromReader(XMLStreamReader reader) {
-        StAXOMBuilder builder =
-                OMXMLBuilderFactory.createStAXOMBuilder(OMAbstractFactory.getOMFactory(), reader);
-
-        return builder.getDocumentElement();
     }
 
     /**

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java?view=diff&rev=486906&r1=486905&r2=486906
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/TransportUtils.java Wed Dec 13 16:29:24 2006
@@ -17,40 +17,19 @@
 
 package org.apache.axis2.transport;
 
-import org.apache.axiom.attachments.Attachments;
-import org.apache.axiom.om.OMException;
-import org.apache.axiom.om.util.StAXUtils;
-import org.apache.axiom.om.impl.MTOMConstants;
-import org.apache.axiom.om.impl.builder.StAXBuilder;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.impl.builder.XOPAwareStAXOMBuilder;
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPFactory;
-import org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder;
-import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
-import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
-import org.apache.axis2.description.Parameter;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.axis2.util.Builder;
 
-import javax.xml.parsers.FactoryConfigurationError;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import java.io.BufferedReader;
-import java.io.IOException;
 import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PushbackInputStream;
-import java.io.Reader;
 
 public class TransportUtils {
-    private static final int BOM_SIZE = 4;
 
     public static SOAPEnvelope createSOAPMessage(MessageContext msgContext, String soapNamespaceURI)
             throws AxisFault {
@@ -80,44 +59,26 @@
                 throw new AxisFault(Messages.getMessage("cannotBeNullOperationContext"));
             }
 
-            StAXBuilder builder;
             SOAPEnvelope envelope ;
             String charSetEnc =
                     (String) msgContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING);
-
             if (charSetEnc == null) {
                 charSetEnc = (String) opContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING);
             }
-
             if (charSetEnc == null) {
                 charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
             }
 
             if (contentType != null) {
                 msgContext.setDoingMTOM(true);
-                builder = selectBuilderForMIME(msgContext, inStream,
-                        (String) contentType,true);
+                OMXMLParserWrapper builder = Builder.getAttachmentsBuilder(msgContext, inStream,
+                        (String) contentType, true);
                 envelope = (SOAPEnvelope) builder.getDocumentElement();
             } else if (msgContext.isDoingREST()) {
-                XMLStreamReader xmlreader =
-                        StAXUtils.createXMLStreamReader(inStream, charSetEnc);
-                SOAPFactory soapFactory = new SOAP11Factory();
-
-                builder = new StAXOMBuilder(xmlreader);
-                builder.setOMBuilderFactory(soapFactory);
-                envelope = soapFactory.getDefaultEnvelope();
-                envelope.getBody().addChild(builder.getDocumentElement());
-                
-                // We now have the message inside an envolope. However, this is 
-                // only an OM; We need to build a SOAP model from it.
-
-                builder = new StAXSOAPModelBuilder(envelope.getXMLStreamReader(), soapNamespaceURI);
+                OMXMLParserWrapper builder = Builder.getPOXBuilder(inStream, charSetEnc, soapNamespaceURI);
                 envelope = (SOAPEnvelope) builder.getDocumentElement();
             } else {
-                XMLStreamReader xmlreader =
-                        StAXUtils.createXMLStreamReader(inStream, charSetEnc);
-
-                builder = new StAXSOAPModelBuilder(xmlreader, soapNamespaceURI);
+                OMXMLParserWrapper builder = Builder.getBuilder(inStream, charSetEnc, soapNamespaceURI);
                 envelope = (SOAPEnvelope) builder.getDocumentElement();
             }
 
@@ -125,220 +86,5 @@
         } catch (Exception e) {
             throw new AxisFault(e);
         }
-    }
-
-    /**
-     * Extracts and returns the character set encoding from the
-     * Content-type header
-     * Example:
-     * Content-Type: text/xml; charset=utf-8
-     *
-     * @param contentType
-     */
-    public static String getCharSetEncoding(String contentType) {
-        int index = contentType.indexOf(HTTPConstants.CHAR_SET_ENCODING);
-
-        if (index == -1) {    // Charset encoding not found in the content-type header
-            // Using the default UTF-8
-            return MessageContext.DEFAULT_CHAR_SET_ENCODING;
-        }
-
-        // If there are spaces around the '=' sign
-        int indexOfEq = contentType.indexOf("=", index);
-
-        // There can be situations where "charset" is not the last parameter of the Content-Type header
-        int indexOfSemiColon = contentType.indexOf(";", indexOfEq);
-        String value;
-
-        if (indexOfSemiColon > 0) {
-            value = (contentType.substring(indexOfEq + 1, indexOfSemiColon));
-        } else {
-            value = (contentType.substring(indexOfEq + 1, contentType.length())).trim();
-        }
-
-        // There might be "" around the value - if so remove them
-        if(value.indexOf('\"')!=-1){
-            value = value.replaceAll("\"", "");
-        }
-
-        return value.trim();
-    }
-
-	public static StAXBuilder selectBuilderForMIME(MessageContext msgContext,
-			InputStream inStream, String contentTypeString, boolean isSOAP)
-			throws OMException, XMLStreamException, FactoryConfigurationError {
-		StAXBuilder builder = null;
-
-		Object cacheAttachmentProperty = msgContext
-				.getProperty(Constants.Configuration.CACHE_ATTACHMENTS);
-		String cacheAttachmentString = null;
-		boolean fileCacheForAttachments;
-
-		if (cacheAttachmentProperty != null
-				&& cacheAttachmentProperty instanceof String) {
-			cacheAttachmentString = (String) cacheAttachmentProperty;
-			fileCacheForAttachments = (Constants.VALUE_TRUE
-					.equals(cacheAttachmentString));
-		} else {
-			Parameter parameter_cache_attachment = msgContext
-					.getParameter(Constants.Configuration.CACHE_ATTACHMENTS);
-			cacheAttachmentString = (parameter_cache_attachment != null) ? (String) parameter_cache_attachment
-					.getValue()
-					: null;
-		}
-		fileCacheForAttachments = (Constants.VALUE_TRUE
-				.equals(cacheAttachmentString));
-
-		String attachmentRepoDir = null;
-		String attachmentSizeThreshold = null;
-
-		if (fileCacheForAttachments) {
-			Object attachmentRepoDirProperty = msgContext
-					.getProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR);
-
-			if (attachmentRepoDirProperty != null) {
-				attachmentRepoDir = (String) attachmentRepoDirProperty;
-			} else {
-				Parameter attachmentRepoDirParameter = msgContext
-						.getParameter(Constants.Configuration.ATTACHMENT_TEMP_DIR);
-				attachmentRepoDir = (attachmentRepoDirParameter != null) ? (String) attachmentRepoDirParameter
-						.getValue()
-						: null;
-			}
-
-			Object attachmentSizeThresholdProperty = msgContext
-					.getProperty(Constants.Configuration.FILE_SIZE_THRESHOLD);
-			if (attachmentSizeThresholdProperty != null
-					&& attachmentSizeThresholdProperty instanceof String) {
-				attachmentSizeThreshold = (String) attachmentSizeThresholdProperty;
-			} else {
-				Parameter attachmentSizeThresholdParameter = msgContext
-						.getParameter(Constants.Configuration.FILE_SIZE_THRESHOLD);
-				attachmentSizeThreshold = attachmentSizeThresholdParameter
-						.getValue().toString();
-			}
-		}
-
-		Attachments attachments = new Attachments(inStream, contentTypeString,
-				fileCacheForAttachments, attachmentRepoDir,
-				attachmentSizeThreshold);
-		String charSetEncoding = getCharSetEncoding(attachments
-				.getSOAPPartContentType());
-		XMLStreamReader streamReader;
-
-		if ((charSetEncoding == null)
-				|| "null".equalsIgnoreCase(charSetEncoding)) {
-			charSetEncoding = MessageContext.UTF_8;
-		}
-
-		try {
-			streamReader = StAXUtils.createXMLStreamReader(getReader(
-					attachments.getSOAPPartInputStream(), charSetEncoding));
-		} catch (IOException e) {
-			throw new XMLStreamException(e);
-		}
-
-		msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
-				charSetEncoding);
-
-		/*
-		 * Put a reference to Attachments Map in to the message context For
-		 * backword compatibility with Axis2 1.0
-		 */
-		msgContext.setProperty(MTOMConstants.ATTACHMENTS, attachments);
-
-		/*
-		 * Setting the Attachments map to new SwA API
-		 */
-		msgContext.setAttachmentMap(attachments);
-
-		String soapEnvelopeNamespaceURI = null;
-		if (contentTypeString.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1) {
-			soapEnvelopeNamespaceURI = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
-		} else if (contentTypeString
-				.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1) {
-			soapEnvelopeNamespaceURI = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
-		}
-
-		if (isSOAP) {
-			if (attachments.getAttachmentSpecType().equals(
-					MTOMConstants.MTOM_TYPE)
-					& null != soapEnvelopeNamespaceURI) {
-
-				/*
-				 * Creates the MTOM specific MTOMStAXSOAPModelBuilder
-				 */
-				builder = new MTOMStAXSOAPModelBuilder(streamReader,
-						attachments, soapEnvelopeNamespaceURI);
-
-			} else if (attachments.getAttachmentSpecType().equals(
-					MTOMConstants.SWA_TYPE)
-					& null != soapEnvelopeNamespaceURI) {
-				builder = new StAXSOAPModelBuilder(streamReader,
-						soapEnvelopeNamespaceURI);
-			}
-		}
-		// To handle REST XOP case
-		else {
-			if (attachments.getAttachmentSpecType().equals(
-					MTOMConstants.MTOM_TYPE)) {
-				XOPAwareStAXOMBuilder stAXOMBuilder = new XOPAwareStAXOMBuilder(
-						streamReader, attachments);
-				builder = stAXOMBuilder;
-
-			} else if (attachments.getAttachmentSpecType().equals(
-					MTOMConstants.SWA_TYPE)) {
-				builder = new StAXOMBuilder(streamReader);
-			}
-		}
-
-		return builder;
-	}
-
-    /**
-	 * Use the BOM Mark to identify the encoding to be used. Fall back to
-	 * default encoding specified
-	 * 
-	 * @param is
-	 * @param charSetEncoding
-	 * @throws java.io.IOException
-	 */
-    private static Reader getReader(InputStream is, String charSetEncoding) throws IOException {
-        PushbackInputStream is2 = new PushbackInputStream(is, BOM_SIZE);
-        String encoding;
-        byte bom[] = new byte[BOM_SIZE];
-        int n, unread;
-
-        n = is2.read(bom, 0, bom.length);
-
-        if ((bom[0] == (byte) 0xEF) && (bom[1] == (byte) 0xBB) && (bom[2] == (byte) 0xBF)) {
-            encoding = "UTF-8";
-            unread = n - 3;
-        } else if ((bom[0] == (byte) 0xFE) && (bom[1] == (byte) 0xFF)) {
-            encoding = "UTF-16BE";
-            unread = n - 2;
-        } else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)) {
-            encoding = "UTF-16LE";
-            unread = n - 2;
-        } else if ((bom[0] == (byte) 0x00) && (bom[1] == (byte) 0x00) && (bom[2] == (byte) 0xFE)
-                && (bom[3] == (byte) 0xFF)) {
-            encoding = "UTF-32BE";
-            unread = n - 4;
-        } else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE) && (bom[2] == (byte) 0x00)
-                && (bom[3] == (byte) 0x00)) {
-            encoding = "UTF-32LE";
-            unread = n - 4;
-        } else {
-
-            // Unicode BOM mark not found, unread all bytes
-            encoding = charSetEncoding;
-            unread = n;
-        }
-
-        if (unread > 0) {
-            is2.unread(bom, (n - unread), unread);
-        }
-
-        return new BufferedReader(new InputStreamReader(is2, encoding));
     }
 }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java?view=diff&rev=486906&r1=486905&r2=486906
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/HTTPTransportUtils.java Wed Dec 13 16:29:24 2006
@@ -21,10 +21,11 @@
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.impl.builder.StAXBuilder;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.util.StAXUtils;
-import org.apache.axiom.soap.*;
-import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.SOAPProcessingException;
 import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
 import org.apache.axiom.soap.impl.llom.soap12.SOAP12Factory;
 import org.apache.axis2.AxisFault;
@@ -36,13 +37,12 @@
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.engine.Handler.InvocationResponse;
-import org.apache.axis2.transport.TransportUtils;
+import org.apache.axis2.util.Builder;
 import org.apache.axis2.util.JavaUtils;
 import org.apache.axis2.util.Utils;
 
 import javax.xml.parsers.FactoryConfigurationError;
 import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -195,108 +195,51 @@
             SOAPEnvelope envelope = null;
             StAXBuilder builder = null;
 
-            if (contentType != null) {
+            // get the type of char encoding
+            String charSetEnc = Builder.getCharSetEncoding(contentType);
+            if(charSetEnc == null){
+                charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
+            }
+            // Setting the value in msgCtx
+            msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, charSetEnc);
 
+            String soapNS = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+            if (contentType != null) {
                 if (contentType.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1) {
                     soapVersion = VERSION_SOAP12;
+                    soapNS = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+                    processContentTypeForAction(contentType, msgContext);
                 } else if (contentType.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1) {
                     soapVersion = VERSION_SOAP11;
+                    soapNS = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
                 }
                 if (JavaUtils.indexOfIgnoreCase(contentType, HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED) > -1) {
                     // It is MIME (MTOM or SwA)
-                    builder = TransportUtils.selectBuilderForMIME(msgContext, in, contentType,true);
+                    builder = Builder.getAttachmentsBuilder(msgContext, in, contentType, true);
                     envelope = (SOAPEnvelope) builder.getDocumentElement();
-                } else {
-                    XMLStreamReader xmlreader;
-
-                    // Figure out the char set encoding and create the reader
-
-                    // If charset is not specified
-                    if (TransportUtils.getCharSetEncoding(contentType) == null) {
-                        xmlreader = StAXUtils.createXMLStreamReader(in,
-                                                                    MessageContext.DEFAULT_CHAR_SET_ENCODING);
-
-                        // Set the encoding scheme in the message context
-                        msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
-                                               MessageContext.DEFAULT_CHAR_SET_ENCODING);
-                    } else {
-
-                        // get the type of char encoding
-                        String charSetEnc = TransportUtils.getCharSetEncoding(contentType);
-
-                        xmlreader = StAXUtils.createXMLStreamReader(in,
-                                                                    charSetEnc);
-
-                        // Setting the value in msgCtx
-                        msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, charSetEnc);
-                    }
+                } else if (soapVersion == VERSION_SOAP11) {
+                    // Deployment configuration parameter
+                    Parameter enable =
+                            msgContext.getParameter(Constants.Configuration.ENABLE_REST);
+
+                    if ((soapActionHeader == null) && (enable != null)) {
+                        if (Constants.VALUE_TRUE.equals(enable.getValue())) {
+                            // If the content Type is text/xml (BTW which is the SOAP 1.1 Content type ) and
+                            // the SOAP Action is absent it is rest !!
+                            msgContext.setDoingREST(true);
 
-                    if (soapVersion == VERSION_SOAP12) {
-                        //Check for action header and set it in as soapAction in MessageContext
-                        int index = contentType.indexOf("action");
-                        if (index > -1) {
-                            String transientString = contentType.substring(index, contentType.length());
-                            int equal = transientString.indexOf("=");
-                            int firstSemiColon = transientString.indexOf(";");
-                            String soapAction; // This will contain "" in the string
-                            if (firstSemiColon > -1) {
-                                soapAction = transientString.substring(equal + 1, firstSemiColon);
-                            } else {
-                                soapAction = transientString.substring(equal + 1, transientString.length());
-                            }
-                            if ((soapAction != null) && soapAction.startsWith("\"")
-                                && soapAction.endsWith("\"")) {
-                                soapAction = soapAction
-                                        .substring(1, soapAction.length() - 1);
-                            }
-                            msgContext.setSoapAction(soapAction);
+                            SOAPFactory soapFactory = new SOAP11Factory();
+                            envelope = soapFactory.getDefaultEnvelope();
 
-                        }
-
-                        // it is SOAP 1.2
-                        builder =
-                                new StAXSOAPModelBuilder(xmlreader,
-                                                         SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-                        envelope = (SOAPEnvelope) builder.getDocumentElement();
-                    } else if (soapVersion == VERSION_SOAP11) {
-                        /**
-                         * Configuration via Deployment
-                         */
-                        Parameter enable =
-                                msgContext.getParameter(Constants.Configuration.ENABLE_REST);
-
-                        if ((soapActionHeader == null) && (enable != null)) {
-                            if (Constants.VALUE_TRUE.equals(enable.getValue())) {
-
-                                // If the content Type is text/xml (BTW which is the SOAP 1.1 Content type ) and
-                                // the SOAP Action is absent it is rest !!
-                                msgContext.setDoingREST(true);
-
-                                SOAPFactory soapFactory = new SOAP11Factory();
-
-                                builder = new StAXOMBuilder(xmlreader);
-                                builder.setOMBuilderFactory(soapFactory);
-                                envelope = soapFactory.getDefaultEnvelope();
-                                envelope.getBody().addChild(builder.getDocumentElement());
-                            }
-                        } else {
-                            builder = new StAXSOAPModelBuilder(
-                                    xmlreader, SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-                            envelope = (SOAPEnvelope) builder.getDocumentElement();
+                            builder = Builder.getBuilder(soapFactory, in, charSetEnc);
+                            envelope.getBody().addChild(builder.getDocumentElement());
                         }
                     }
                 }
             }
 
             if (builder == null) {
-                XMLStreamReader xmlreader = StAXUtils.createXMLStreamReader(in,
-                                                                            MessageContext.DEFAULT_CHAR_SET_ENCODING);
-
-                // Set the encoding scheme in the message context
-                msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
-                                       MessageContext.DEFAULT_CHAR_SET_ENCODING);
-                builder = new StAXSOAPModelBuilder(
-                        xmlreader, SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+                builder = Builder.getBuilder(in, charSetEnc, soapNS);
                 envelope = (SOAPEnvelope) builder.getDocumentElement();
             }
 
@@ -346,6 +289,29 @@
             if ((msgContext.getEnvelope() == null) && soapVersion != VERSION_SOAP11) {
                 msgContext.setEnvelope(new SOAP12Factory().getDefaultEnvelope());
             }
+        }
+    }
+
+    private static void processContentTypeForAction(String contentType, MessageContext msgContext) {
+        //Check for action header and set it in as soapAction in MessageContext
+        int index = contentType.indexOf("action");
+        if (index > -1) {
+            String transientString = contentType.substring(index, contentType.length());
+            int equal = transientString.indexOf("=");
+            int firstSemiColon = transientString.indexOf(";");
+            String soapAction; // This will contain "" in the string
+            if (firstSemiColon > -1) {
+                soapAction = transientString.substring(equal + 1, firstSemiColon);
+            } else {
+                soapAction = transientString.substring(equal + 1, transientString.length());
+            }
+            if ((soapAction != null) && soapAction.startsWith("\"")
+                && soapAction.endsWith("\"")) {
+                soapAction = soapAction
+                        .substring(1, soapAction.length() - 1);
+            }
+            msgContext.setSoapAction(soapAction);
+
         }
     }
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/util/RESTUtil.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/util/RESTUtil.java?view=diff&rev=486906&r1=486905&r2=486906
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/util/RESTUtil.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/http/util/RESTUtil.java Wed Dec 13 16:29:24 2006
@@ -17,8 +17,7 @@
 
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.impl.OMNodeEx;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.om.impl.builder.StAXBuilder;
 import org.apache.axiom.soap.SOAPBody;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
@@ -30,8 +29,8 @@
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.engine.RequestURIBasedDispatcher;
-import org.apache.axis2.transport.TransportUtils;
 import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.axis2.util.Builder;
 import org.apache.axis2.util.SchemaUtil;
 import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.ws.commons.schema.XmlSchemaElement;
@@ -39,7 +38,6 @@
 import javax.servlet.ServletInputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import javax.xml.stream.XMLStreamReader;
 import java.io.IOException;
 
 /**
@@ -184,34 +182,25 @@
             // I'm assuming here that the user is sending this data according to the schema.
             if (checkContentType(org.apache.axis2.transport.http.HTTPConstants.MEDIA_TYPE_TEXT_XML, contentType)) {
 
-                // If charset is not specified
-                XMLStreamReader xmlreader;
-                if (TransportUtils.getCharSetEncoding(contentType) == null) {
-                    xmlreader = StAXUtils.createXMLStreamReader(inputStream, MessageContext.DEFAULT_CHAR_SET_ENCODING);
-
-                    // Set the encoding scheme in the message context
-                    msgCtxt.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
-                            MessageContext.DEFAULT_CHAR_SET_ENCODING);
+                String charSetEnc;
+                if (Builder.getCharSetEncoding(contentType) == null) {
+                    // If charset is not specified
+                    charSetEnc = MessageContext.DEFAULT_CHAR_SET_ENCODING;
                 } else {
-
                     // get the type of char encoding
-                    String charSetEnc = TransportUtils.getCharSetEncoding(contentType);
-
-                    xmlreader = StAXUtils.createXMLStreamReader(inputStream,
-                            charSetEnc);
-
-                    // Setting the value in msgCtx
-                    msgCtxt.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, charSetEnc);
+                    charSetEnc = Builder.getCharSetEncoding(contentType);
                 }
+                // Setting the value in msgCtx
+                msgCtxt.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, charSetEnc);
 
-                OMNodeEx documentElement = (OMNodeEx) new StAXOMBuilder(xmlreader).getDocumentElement();
+                StAXBuilder builder = Builder.getBuilder(inputStream, charSetEnc, null);
+                OMNodeEx documentElement = (OMNodeEx) builder.getDocumentElement();
                 documentElement.setParent(null);
                 body.addChild(documentElement);
 
                 // if the media type is multipart/related, get help from Axis2 :)
-            } else
-            if (checkContentType(org.apache.axis2.transport.http.HTTPConstants.MEDIA_TYPE_MULTIPART_RELATED, contentType)) {
-                body.addChild(TransportUtils.selectBuilderForMIME(msgCtxt,
+            } else if (checkContentType(org.apache.axis2.transport.http.HTTPConstants.MEDIA_TYPE_MULTIPART_RELATED, contentType)) {
+                body.addChild(Builder.getAttachmentsBuilder(msgCtxt,
                         inputStream,
                         contentType, false).getDocumentElement());
             }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSUtils.java?view=diff&rev=486906&r1=486905&r2=486906
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSUtils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/jms/JMSUtils.java Wed Dec 13 16:29:24 2006
@@ -17,21 +17,19 @@
 
 import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axiom.om.impl.builder.StAXBuilder;
-import org.apache.axiom.om.util.StAXUtils;
 import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
-import org.apache.axis2.util.JavaUtils;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.engine.AxisConfiguration;
-import org.apache.axis2.transport.TransportUtils;
 import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.axis2.util.Builder;
+import org.apache.axis2.util.JavaUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -40,7 +38,6 @@
 import javax.jms.Message;
 import javax.jms.TextMessage;
 import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
@@ -163,7 +160,7 @@
                     return
                         new ByteArrayInputStream(
                             txtMsg.getText().getBytes(
-                            TransportUtils.getCharSetEncoding(contentType)));
+                            Builder.getCharSetEncoding(contentType)));
                 } else {
                     return
                         new ByteArrayInputStream(txtMsg.getText().getBytes());
@@ -294,65 +291,23 @@
         throws XMLStreamException {
 
         SOAPEnvelope envelope = null;
-        StAXBuilder builder = null;
-
+        StAXBuilder builder;
         String contentType = JMSUtils.getProperty(message, JMSConstants.CONTENT_TYPE);
 
-        if (contentType != null) {
-            if (contentType.indexOf(
+        if (contentType != null && contentType.indexOf(
                 HTTPConstants.HEADER_ACCEPT_MULTIPART_RELATED) > -1) {
-                // It is MTOM
-                builder = TransportUtils.selectBuilderForMIME(
-                    msgContext, in, contentType,true);
-                envelope = (SOAPEnvelope) builder.getDocumentElement();
-
-            } else {
-                // Figure out the char set encoding and create the reader
-                XMLStreamReader xmlreader;
-
-                // If charset is not specified
-                if (TransportUtils.getCharSetEncoding(contentType) == null) {
-                    xmlreader = StAXUtils.createXMLStreamReader(in,
-                                                                MessageContext.DEFAULT_CHAR_SET_ENCODING);
-
-                    // Set the encoding scheme in the message context
-                    msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
-                                           MessageContext.DEFAULT_CHAR_SET_ENCODING);
-
-                } else {
-                    // get the type of char encoding
-                    String charSetEnc = TransportUtils.getCharSetEncoding(contentType);
-                    xmlreader = StAXUtils.createXMLStreamReader(in, charSetEnc);
-
-                    // Setting the value in msgCtx
-                    msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, charSetEnc);
-                }
-
-                if (contentType.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1) {
-                    // it is SOAP 1.2
-                    builder = new StAXSOAPModelBuilder(xmlreader,
-                                                       SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-                    envelope = (SOAPEnvelope) builder.getDocumentElement();
-                } else if (contentType.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1) {
-                    // SOAP 1.1
-                    builder =  new StAXSOAPModelBuilder(xmlreader,
-                                                        SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-                    envelope = (SOAPEnvelope) builder.getDocumentElement();
-                }
-            }
-        }
-
-        if (builder == null) {
-            XMLStreamReader xmlreader = StAXUtils.createXMLStreamReader(in,
-                                                                        MessageContext.DEFAULT_CHAR_SET_ENCODING);
+            builder = Builder.getAttachmentsBuilder(
+                    msgContext, in, contentType, true);
+            envelope = (SOAPEnvelope) builder.getDocumentElement();
+        } else {
+            String charSetEnc = Builder.getCharSetEncoding(contentType);
+            String soapNS = Builder.getEnvelopeNamespace(contentType);
+            builder = Builder.getBuilder(in, charSetEnc, soapNS);
 
             // Set the encoding scheme in the message context
-            msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
-                                   MessageContext.DEFAULT_CHAR_SET_ENCODING);
-            builder = new StAXSOAPModelBuilder(
-                xmlreader, SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-            envelope = (SOAPEnvelope) builder.getDocumentElement();
+            msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, charSetEnc);
         }
+        envelope = (SOAPEnvelope) builder.getDocumentElement();
 
         String charEncOfMessage = builder.getDocument().getCharsetEncoding();
         String charEncOfTransport = ((String) msgContext.getProperty(

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java?view=diff&rev=486906&r1=486905&r2=486906
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java Wed Dec 13 16:29:24 2006
@@ -17,10 +17,8 @@
 
 package org.apache.axis2.transport.local;
 
-import org.apache.axiom.om.impl.builder.StAXBuilder;
-import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.EndpointReference;
@@ -29,13 +27,11 @@
 import org.apache.axis2.description.TransportInDescription;
 import org.apache.axis2.description.TransportOutDescription;
 import org.apache.axis2.engine.AxisEngine;
+import org.apache.axis2.util.Builder;
 
 import javax.xml.namespace.QName;
 import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import java.io.BufferedReader;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 
@@ -71,9 +67,8 @@
             msgCtx.setServerSide(true);
             msgCtx.setProperty(MessageContext.TRANSPORT_OUT, sender.getResponse());
 
-            XMLStreamReader reader = StAXUtils.createXMLStreamReader(
-                    new BufferedReader(new InputStreamReader(in)));
-            StAXBuilder builder = new StAXSOAPModelBuilder(reader, null);
+            InputStreamReader streamReader = new InputStreamReader(in);
+            OMXMLParserWrapper builder = Builder.getBuilder(streamReader);
             SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
 
             msgCtx.setEnvelope(envelope);

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java?view=diff&rev=486906&r1=486905&r2=486906
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java Wed Dec 13 16:29:24 2006
@@ -21,12 +21,10 @@
 import edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue;
 import edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor;
 import edu.emory.mathcs.backport.java.util.concurrent.TimeUnit;
-import org.apache.axiom.om.impl.builder.StAXBuilder;
-import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.EndpointReference;
@@ -38,19 +36,24 @@
 import org.apache.axis2.description.TransportOutDescription;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.transport.TransportListener;
-import org.apache.axis2.transport.TransportUtils;
+import org.apache.axis2.util.Builder;
 import org.apache.axis2.util.Utils;
 import org.apache.axis2.util.threadpool.DefaultThreadFactory;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
-import javax.mail.*;
+import javax.mail.Flags;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Part;
+import javax.mail.URLName;
 import javax.mail.internet.MimeMessage;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
 import java.io.File;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Properties;
@@ -294,10 +297,10 @@
                         String soapNamespaceURI = "";
 
                         /* Set the Charactorset Encoding */
-                        if (TransportUtils.getCharSetEncoding(part.getContentType()) != null) {
+                        if (Builder.getCharSetEncoding(part.getContentType()) != null) {
                             msgContext.setProperty(
                                     org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING,
-                                    TransportUtils.getCharSetEncoding(
+                                    Builder.getCharSetEncoding(
                                             part.getContentType()));
                         } else {
                             msgContext.setProperty(
@@ -319,9 +322,6 @@
                             msgContext.setTo(new EndpointReference(contentDescription));
                         }
 
-                        XMLStreamReader reader =
-                                StAXUtils.createXMLStreamReader(part.getInputStream());
-
                         if (part.getContentType().indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE)
                             > -1) {
                             soapNamespaceURI = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
@@ -356,7 +356,8 @@
                                     "MailWorker found a message other than text/xml or application/soap+xml");
                         }
 
-                        StAXBuilder builder = new StAXSOAPModelBuilder(reader, soapNamespaceURI);
+                        InputStream inputStream = part.getInputStream();
+                        OMXMLParserWrapper builder = Builder.getBuilder(inputStream, null, soapNamespaceURI);
                         SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
                         msgContext.setEnvelope(envelope);
                     }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/server/MailSorter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/server/MailSorter.java?view=diff&rev=486906&r1=486905&r2=486906
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/server/MailSorter.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/server/MailSorter.java Wed Dec 13 16:29:24 2006
@@ -17,18 +17,17 @@
 package org.apache.axis2.transport.mail.server;
 
 import org.apache.axiom.om.impl.builder.StAXBuilder;
-import org.apache.axiom.om.util.StAXUtils;
 import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
 import org.apache.axis2.AxisFault;
-import org.apache.axis2.transport.mail.Constants;
-import org.apache.axis2.util.MessageContextBuilder;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.engine.AxisEngine;
+import org.apache.axis2.transport.mail.Constants;
+import org.apache.axis2.util.Builder;
+import org.apache.axis2.util.MessageContextBuilder;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -36,7 +35,6 @@
 import javax.mail.internet.InternetAddress;
 import javax.mail.internet.MimeMessage;
 import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamReader;
 import java.io.ByteArrayInputStream;
 import java.util.ArrayList;
 
@@ -116,8 +114,6 @@
             log.info("message[" + message + "]");
 
             ByteArrayInputStream bais = new ByteArrayInputStream(message.getBytes());
-            XMLStreamReader reader =
-                    StAXUtils.createXMLStreamReader(bais);
             String soapNamespaceURI = "";
 
             if (mimeMessage.getContentType().indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1) {
@@ -127,7 +123,8 @@
                 soapNamespaceURI = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
             }
 
-            StAXBuilder builder = new StAXSOAPModelBuilder(reader, soapNamespaceURI);
+            StAXBuilder builder = Builder.getBuilder(bais, null, soapNamespaceURI);
+
             SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
 
             msgContext.setEnvelope(envelope);

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/tcp/TCPWorker.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/tcp/TCPWorker.java?view=diff&rev=486906&r1=486905&r2=486906
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/tcp/TCPWorker.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/tcp/TCPWorker.java Wed Dec 13 16:29:24 2006
@@ -17,10 +17,8 @@
 
 package org.apache.axis2.transport.tcp;
 
-import org.apache.axiom.om.impl.builder.StAXBuilder;
-import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
 import org.apache.axis2.context.ConfigurationContext;
@@ -30,12 +28,12 @@
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.i18n.Messages;
+import org.apache.axis2.util.Builder;
 import org.apache.axis2.util.MessageContextBuilder;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
@@ -82,8 +80,7 @@
 
                 // create the SOAP Envelope
                 Reader in = new InputStreamReader(socket.getInputStream());
-                XMLStreamReader xmlreader = StAXUtils.createXMLStreamReader(in);
-                StAXBuilder builder = new StAXSOAPModelBuilder(xmlreader, null);
+                OMXMLParserWrapper builder = Builder.getBuilder(in);
                 SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
 
                 msgContext.setEnvelope(envelope);

Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Builder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Builder.java?view=auto&rev=486906
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Builder.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/Builder.java Wed Dec 13 16:29:24 2006
@@ -0,0 +1,318 @@
+package org.apache.axis2.util;
+
+import org.apache.axiom.om.OMXMLParserWrapper;
+import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.builder.StAXBuilder;
+import org.apache.axiom.om.impl.builder.XOPAwareStAXOMBuilder;
+import org.apache.axiom.om.impl.MTOMConstants;
+import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.attachments.Attachments;
+import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder;
+import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
+import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.Constants;
+import org.apache.axis2.description.Parameter;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.parsers.FactoryConfigurationError;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.PushbackInputStream;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+public class Builder {
+    public static final int BOM_SIZE = 4;
+
+    public static StAXBuilder getPOXBuilder(InputStream inStream, String charSetEnc, String soapNamespaceURI) throws XMLStreamException {
+        StAXBuilder builder;
+        SOAPEnvelope envelope;
+        XMLStreamReader xmlreader =
+                StAXUtils.createXMLStreamReader(inStream, charSetEnc);
+        SOAPFactory soapFactory = new SOAP11Factory();
+
+        builder = new StAXOMBuilder(xmlreader);
+        builder.setOMBuilderFactory(soapFactory);
+        envelope = soapFactory.getDefaultEnvelope();
+        envelope.getBody().addChild(builder.getDocumentElement());
+
+        // We now have the message inside an envolope. However, this is
+        // only an OM; We need to build a SOAP model from it.
+
+        builder = new StAXSOAPModelBuilder(envelope.getXMLStreamReader(), soapNamespaceURI);
+        return builder;
+    }
+
+    /**
+	 * Use the BOM Mark to identify the encoding to be used. Fall back to
+	 * default encoding specified
+	 *
+	 * @param is
+	 * @param charSetEncoding
+	 * @throws java.io.IOException
+	 */
+    public static Reader getReader(InputStream is, String charSetEncoding) throws IOException {
+        PushbackInputStream is2 = new PushbackInputStream(is, BOM_SIZE);
+        String encoding;
+        byte bom[] = new byte[BOM_SIZE];
+        int n, unread;
+
+        n = is2.read(bom, 0, bom.length);
+
+        if ((bom[0] == (byte) 0xEF) && (bom[1] == (byte) 0xBB) && (bom[2] == (byte) 0xBF)) {
+            encoding = "UTF-8";
+            unread = n - 3;
+        } else if ((bom[0] == (byte) 0xFE) && (bom[1] == (byte) 0xFF)) {
+            encoding = "UTF-16BE";
+            unread = n - 2;
+        } else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)) {
+            encoding = "UTF-16LE";
+            unread = n - 2;
+        } else if ((bom[0] == (byte) 0x00) && (bom[1] == (byte) 0x00) && (bom[2] == (byte) 0xFE)
+                && (bom[3] == (byte) 0xFF)) {
+            encoding = "UTF-32BE";
+            unread = n - 4;
+        } else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE) && (bom[2] == (byte) 0x00)
+                && (bom[3] == (byte) 0x00)) {
+            encoding = "UTF-32LE";
+            unread = n - 4;
+        } else {
+
+            // Unicode BOM mark not found, unread all bytes
+            encoding = charSetEncoding;
+            unread = n;
+        }
+
+        if (unread > 0) {
+            is2.unread(bom, (n - unread), unread);
+        }
+
+        return new BufferedReader(new InputStreamReader(is2, encoding));
+    }
+
+
+    public static String getEnvelopeNamespace(String contentType) {
+        String soapNS = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+        if(contentType != null) {
+            if (contentType.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1) {
+                // it is SOAP 1.2
+                soapNS = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+            } else if (contentType.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1) {
+                // SOAP 1.1
+                soapNS = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+            }
+        }
+        return soapNS;
+    }
+
+    /**
+     * Extracts and returns the character set encoding from the
+     * Content-type header
+     * Example:
+     * Content-Type: text/xml; charset=utf-8
+     *
+     * @param contentType
+     */
+    public static String getCharSetEncoding(String contentType) {
+        if (contentType == null) {
+            // Using the default UTF-8
+            return MessageContext.DEFAULT_CHAR_SET_ENCODING;
+        }
+
+        int index = contentType.indexOf(HTTPConstants.CHAR_SET_ENCODING);
+
+        if (index == -1) {    // Charset encoding not found in the content-type header
+            // Using the default UTF-8
+            return MessageContext.DEFAULT_CHAR_SET_ENCODING;
+        }
+
+        // If there are spaces around the '=' sign
+        int indexOfEq = contentType.indexOf("=", index);
+
+        // There can be situations where "charset" is not the last parameter of the Content-Type header
+        int indexOfSemiColon = contentType.indexOf(";", indexOfEq);
+        String value;
+
+        if (indexOfSemiColon > 0) {
+            value = (contentType.substring(indexOfEq + 1, indexOfSemiColon));
+        } else {
+            value = (contentType.substring(indexOfEq + 1, contentType.length())).trim();
+        }
+
+        // There might be "" around the value - if so remove them
+        if(value.indexOf('\"')!=-1){
+            value = value.replaceAll("\"", "");
+        }
+
+        return value.trim();
+    }
+
+    public static StAXBuilder getAttachmentsBuilder(MessageContext msgContext,
+			InputStream inStream, String contentTypeString, boolean isSOAP)
+			throws OMException, XMLStreamException, FactoryConfigurationError {
+		StAXBuilder builder = null;
+
+		Object cacheAttachmentProperty = msgContext
+				.getProperty(Constants.Configuration.CACHE_ATTACHMENTS);
+		String cacheAttachmentString = null;
+		boolean fileCacheForAttachments;
+
+		if (cacheAttachmentProperty != null
+				&& cacheAttachmentProperty instanceof String) {
+			cacheAttachmentString = (String) cacheAttachmentProperty;
+			fileCacheForAttachments = (Constants.VALUE_TRUE
+					.equals(cacheAttachmentString));
+		} else {
+			Parameter parameter_cache_attachment = msgContext
+					.getParameter(Constants.Configuration.CACHE_ATTACHMENTS);
+			cacheAttachmentString = (parameter_cache_attachment != null) ? (String) parameter_cache_attachment
+					.getValue()
+					: null;
+		}
+		fileCacheForAttachments = (Constants.VALUE_TRUE
+				.equals(cacheAttachmentString));
+
+		String attachmentRepoDir = null;
+		String attachmentSizeThreshold = null;
+
+		if (fileCacheForAttachments) {
+			Object attachmentRepoDirProperty = msgContext
+					.getProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR);
+
+			if (attachmentRepoDirProperty != null) {
+				attachmentRepoDir = (String) attachmentRepoDirProperty;
+			} else {
+				Parameter attachmentRepoDirParameter = msgContext
+						.getParameter(Constants.Configuration.ATTACHMENT_TEMP_DIR);
+				attachmentRepoDir = (attachmentRepoDirParameter != null) ? (String) attachmentRepoDirParameter
+						.getValue()
+						: null;
+			}
+
+			Object attachmentSizeThresholdProperty = msgContext
+					.getProperty(Constants.Configuration.FILE_SIZE_THRESHOLD);
+			if (attachmentSizeThresholdProperty != null
+					&& attachmentSizeThresholdProperty instanceof String) {
+				attachmentSizeThreshold = (String) attachmentSizeThresholdProperty;
+			} else {
+				Parameter attachmentSizeThresholdParameter = msgContext
+						.getParameter(Constants.Configuration.FILE_SIZE_THRESHOLD);
+				attachmentSizeThreshold = attachmentSizeThresholdParameter
+						.getValue().toString();
+			}
+		}
+
+		Attachments attachments = new Attachments(inStream, contentTypeString,
+				fileCacheForAttachments, attachmentRepoDir,
+				attachmentSizeThreshold);
+		String charSetEncoding = getCharSetEncoding(attachments
+				.getSOAPPartContentType());
+		XMLStreamReader streamReader;
+
+		if ((charSetEncoding == null)
+				|| "null".equalsIgnoreCase(charSetEncoding)) {
+			charSetEncoding = MessageContext.UTF_8;
+		}
+
+		try {
+			streamReader = StAXUtils.createXMLStreamReader(getReader(
+					attachments.getSOAPPartInputStream(), charSetEncoding));
+		} catch (IOException e) {
+			throw new XMLStreamException(e);
+		}
+
+		msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
+				charSetEncoding);
+
+		/*
+		 * Put a reference to Attachments Map in to the message context For
+		 * backword compatibility with Axis2 1.0
+		 */
+		msgContext.setProperty(MTOMConstants.ATTACHMENTS, attachments);
+
+		/*
+		 * Setting the Attachments map to new SwA API
+		 */
+		msgContext.setAttachmentMap(attachments);
+
+		String soapEnvelopeNamespaceURI = null;
+		if (contentTypeString.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1) {
+			soapEnvelopeNamespaceURI = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+		} else if (contentTypeString
+				.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1) {
+			soapEnvelopeNamespaceURI = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+		}
+
+		if (isSOAP) {
+			if (attachments.getAttachmentSpecType().equals(
+					MTOMConstants.MTOM_TYPE)
+					& null != soapEnvelopeNamespaceURI) {
+
+				/*
+				 * Creates the MTOM specific MTOMStAXSOAPModelBuilder
+				 */
+				builder = new MTOMStAXSOAPModelBuilder(streamReader,
+						attachments, soapEnvelopeNamespaceURI);
+
+			} else if (attachments.getAttachmentSpecType().equals(
+					MTOMConstants.SWA_TYPE)
+					& null != soapEnvelopeNamespaceURI) {
+				builder = new StAXSOAPModelBuilder(streamReader,
+						soapEnvelopeNamespaceURI);
+			}
+		}
+		// To handle REST XOP case
+		else {
+			if (attachments.getAttachmentSpecType().equals(
+					MTOMConstants.MTOM_TYPE)) {
+				XOPAwareStAXOMBuilder stAXOMBuilder = new XOPAwareStAXOMBuilder(
+						streamReader, attachments);
+				builder = stAXOMBuilder;
+
+			} else if (attachments.getAttachmentSpecType().equals(
+					MTOMConstants.SWA_TYPE)) {
+				builder = new StAXOMBuilder(streamReader);
+			}
+		}
+
+		return builder;
+	}
+
+    public static StAXBuilder getBuilder(Reader in) throws XMLStreamException {
+        XMLStreamReader xmlreader = StAXUtils.createXMLStreamReader(in);
+        StAXBuilder builder = new StAXSOAPModelBuilder(xmlreader, null);
+        return builder;
+    }
+
+    public static StAXBuilder getBuilder(InputStream inStream, String charSetEnc, String soapNamespaceURI) throws XMLStreamException {
+        StAXBuilder builder;
+        XMLStreamReader xmlreader;
+        if(charSetEnc == null) {
+            xmlreader = StAXUtils.createXMLStreamReader(inStream);
+        } else {
+            xmlreader = StAXUtils.createXMLStreamReader(inStream, charSetEnc);
+        }
+        if(soapNamespaceURI == null) {
+            builder = new StAXOMBuilder(xmlreader);
+        } else {
+            builder = new StAXSOAPModelBuilder(xmlreader, soapNamespaceURI);
+        }
+        return builder;
+    }
+
+    public static StAXBuilder getBuilder(SOAPFactory soapFactory, InputStream in, String charSetEnc) throws XMLStreamException {
+        StAXBuilder builder;
+        XMLStreamReader xmlreader = StAXUtils.createXMLStreamReader(in, charSetEnc);
+        builder = new StAXOMBuilder(soapFactory, xmlreader);
+        return builder;
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org