Author: scheu
Date: Fri Apr 25 06:16:24 2008
New Revision: 651600

URL: http://svn.apache.org/viewvc?rev=651600&view=rev
Log:
WSCOMMONS-324
Contributor:Rich Scheuerle
Summary of Changes:
  - Changed StreamingOMSerializer to recognize readers that have access to 
attachments and writers that accept attachments.
    Using this information, the StreamingOMSerializer either inlines or 
optimizes xop:include statements.
  - Added the OMAttachmentAccessor interface.  The interface has one method, 
getDataHandler(cid).  This interface is added
    to the OM objects that allow access to attachment data. 
  - Added setContentID to OMText.  This was necessary to preserve the cid for 
streaming optimized mtom cases.
  - Changed the MTOMStAXSOAPModelBuilderTest to validate streaming with 
optimized MTOM attachments and streaming
    with inlined MTOM attachments.

Added:
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMAttachmentAccessor.java
Modified:
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMText.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/XOPAwareStAXOMBuilder.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/XOPBuilder.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextImpl.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/mtom/MTOMStAXSOAPModelBuilderTest.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPEnvelopeBuildTest.java

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java?rev=651600&r1=651599&r2=651600&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java
 Fri Apr 25 06:16:24 2008
@@ -22,6 +22,7 @@
 import org.apache.axiom.attachments.impl.PartFactory;
 import org.apache.axiom.attachments.lifecycle.LifecycleManager;
 import org.apache.axiom.attachments.lifecycle.impl.LifecycleManagerImpl;
+import org.apache.axiom.om.OMAttachmentAccessor;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.impl.MTOMConstants;
 import org.apache.axiom.om.util.DetachableInputStream;
@@ -30,7 +31,6 @@
 import org.apache.commons.logging.LogFactory;
 
 import javax.activation.DataHandler;
-import javax.activation.DataSource;
 import javax.mail.MessagingException;
 import javax.mail.internet.ContentType;
 import javax.mail.internet.ParseException;
@@ -43,7 +43,7 @@
 import java.util.Set;
 import java.util.TreeMap;
 
-public class Attachments {
+public class Attachments implements OMAttachmentAccessor {
 
     /** <code>ContentType</code> of the MIME message */
     ContentType contentType;

Added: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMAttachmentAccessor.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMAttachmentAccessor.java?rev=651600&view=auto
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMAttachmentAccessor.java
 (added)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMAttachmentAccessor.java
 Fri Apr 25 06:16:24 2008
@@ -0,0 +1,35 @@
+/*
+ * 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.axiom.om;
+
+import javax.activation.DataHandler;
+
+/**
+ * This interface is applied to objects that
+ * can access attachments.
+ */
+public interface OMAttachmentAccessor {
+
+    /**
+     * @param blobContentID (without the surrounding angle brackets and "cid:" 
prefix)
+     * @return The DataHandler of the mime part referred by the Content-Id or 
*null* if the mime
+     *         part referred by the content-id does not exist
+     */
+    public DataHandler getDataHandler(String blobcid);
+}

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMText.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMText.java?rev=651600&r1=651599&r2=651600&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMText.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMText.java
 Fri Apr 25 06:16:24 2008
@@ -83,5 +83,11 @@
      * @return Returns String.
      */
     String getContentID();
+    
+    /**
+     * Set a specific content id
+     * @param cid
+     */
+    void setContentID(String cid);
 
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/XOPAwareStAXOMBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/XOPAwareStAXOMBuilder.java?rev=651600&r1=651599&r2=651600&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/XOPAwareStAXOMBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/XOPAwareStAXOMBuilder.java
 Fri Apr 25 06:16:24 2008
@@ -36,7 +36,8 @@
 import java.io.FileNotFoundException;
 import java.io.InputStream;
 
-public class XOPAwareStAXOMBuilder extends StAXOMBuilder implements XOPBuilder 
{
+public class XOPAwareStAXOMBuilder 
+    extends StAXOMBuilder implements XOPBuilder {
 
     /** <code>Attachments</code> handles deferred parsing of incoming MIME 
Messages. */
     Attachments attachments;

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/XOPBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/XOPBuilder.java?rev=651600&r1=651599&r2=651600&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/XOPBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/XOPBuilder.java
 Fri Apr 25 06:16:24 2008
@@ -19,11 +19,12 @@
 
 package org.apache.axiom.om.impl.builder;
 
+import org.apache.axiom.om.OMAttachmentAccessor;
 import org.apache.axiom.om.OMException;
 
 import javax.activation.DataHandler;
 
-public interface XOPBuilder {
+public interface XOPBuilder extends OMAttachmentAccessor {
 
     DataHandler getDataHandler(String blobContentID)
             throws OMException;

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java?rev=651600&r1=651599&r2=651600&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/serialize/StreamingOMSerializer.java
 Fri Apr 25 06:16:24 2008
@@ -19,18 +19,30 @@
 
 package org.apache.axiom.om.impl.serialize;
 
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMAttachmentAccessor;
+import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMSerializer;
+import org.apache.axiom.om.OMText;
+import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
 import org.apache.axiom.om.impl.util.OMSerializerUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
+import javax.activation.DataHandler;
 import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
+
 import java.util.ArrayList;
 
 /** Class StreamingOMSerializer */
 public class StreamingOMSerializer implements XMLStreamConstants, OMSerializer 
{
+    
+    Log log = LogFactory.getLog(StreamingOMSerializer.class);
 
     private static int namespaceSuffix = 0;
     public static final String NAMESPACE_PREFIX = "ns";
@@ -44,6 +56,12 @@
 
     /** Field depth */
     private int depth = 0;
+    
+    public static final QName XOP_INCLUDE = 
+        new QName("http://www.w3.org/2004/08/xop/include";, "Include");
+    
+    private boolean inputHasAttachments = false;
+    private boolean skipEndElement = false;
 
     /**
      * Method serialize.
@@ -65,6 +83,12 @@
      */
     public void serialize(XMLStreamReader node, XMLStreamWriter writer, 
boolean startAtNext)
             throws XMLStreamException {
+        
+        // Set attachment status
+        if (node instanceof OMAttachmentAccessor) {
+            inputHasAttachments = true;
+        }
+        
         serializeNode(node, writer, startAtNext);
     }
 
@@ -138,6 +162,7 @@
     protected void serializeElement(XMLStreamReader reader,
                                     XMLStreamWriter writer)
             throws XMLStreamException {
+        
 
         // Note: To serialize the start tag, we must follow the order dictated 
by the JSR-173 (StAX) specification.
         // Please keep this code in sync with the code in 
OMSerializerUtil.serializeStartpart
@@ -163,6 +188,20 @@
         ePrefix = (ePrefix != null && ePrefix.length() == 0) ? null : ePrefix;
         String eNamespace = reader.getNamespaceURI();
         eNamespace = (eNamespace != null && eNamespace.length() == 0) ? null : 
eNamespace;
+        
+        if (this.inputHasAttachments &&
+            XOP_INCLUDE.getNamespaceURI().equals(eNamespace)) {
+            String eLocalPart = reader.getLocalName();
+            if (XOP_INCLUDE.getLocalPart().equals(eLocalPart)) {
+                if (serializeXOPInclude(reader, writer)) {
+                    // Since the xop:include is replaced with inlined text,
+                    // skip the rest of serialize element and skip the end 
event for 
+                    // of the xop:include
+                    skipEndElement = true;  
+                    return;
+                }
+            }
+        }
 
         // Write the startElement if required
         boolean setPrefixFirst = 
OMSerializerUtil.isSetPrefixBeforeStartElement(writer);
@@ -355,6 +394,10 @@
      */
     protected void serializeEndElement(XMLStreamWriter writer)
             throws XMLStreamException {
+        if (this.skipEndElement) {
+            skipEndElement = false;
+            return;
+        }
         writer.writeEndElement();
     }
 
@@ -492,5 +535,91 @@
             writer.writeNamespace(prefix, URI);
             writer.setPrefix(prefix, URI);
         }
+    }
+    
+    /**
+     * Inspect the current element and if it is an
+     * XOP Include then write it out as inlined or optimized.
+     * @param reader
+     * @param writer
+     * @return true if inlined
+     */ 
+    protected boolean serializeXOPInclude(XMLStreamReader reader,
+                                          XMLStreamWriter writer) {
+       String cid = reader.getAttributeValue(null, "href");
+       DataHandler dh = getDataHandler(cid, (OMAttachmentAccessor) reader);
+       if (dh == null) {
+           return false;
+       }
+       
+       OMFactory omFactory = OMAbstractFactory.getOMFactory();
+       OMText omText = omFactory.createOMText(dh, true);
+       omText.setContentID(cid);
+       
+       
+       MTOMXMLStreamWriter mtomWriter = 
+           (writer instanceof MTOMXMLStreamWriter) ? 
+                   (MTOMXMLStreamWriter) writer : 
+                       null;
+                   
+       if (mtomWriter != null && 
+               mtomWriter.isOptimized() &&
+               mtomWriter.isOptimizedThreshold(omText)) {
+           // This will write the attachment after the xml message
+           mtomWriter.writeOptimized(omText);
+           return false;
+       }
+       
+       // This will inline the attachment
+       omText.setOptimize(false);
+       try {
+           writer.writeCharacters(omText.getText());
+           return true;
+       } catch (XMLStreamException e) {
+           // Just writer out the xop:include
+           return false;
+       }
+      
+    }
+    
+    private DataHandler getDataHandler(String cid, OMAttachmentAccessor oaa) {
+        DataHandler dh = null;
+        
+        String blobcid = cid;
+        if (blobcid.startsWith("cid:")) {
+            blobcid = blobcid.substring(4);
+        }
+        // Get the attachment
+        if (oaa != null) {
+             dh = oaa.getDataHandler(blobcid);
+        }
+        
+        if (dh == null) {
+            blobcid = getNewCID(cid);
+            if (blobcid.startsWith("cid:")) {
+                blobcid = blobcid.substring(4);
+            }
+            if (oaa != null) {
+                dh = oaa.getDataHandler(blobcid);
+           }
+        }
+        return dh;
+    }
+    
+    /**
+     * @param cid
+     * @return cid with translated characters
+     */
+    private String getNewCID(String cid) {
+        String cid2 = cid;
+
+        try {
+            cid2 = java.net.URLDecoder.decode(cid, "UTF-8");
+        } catch (Exception e) {
+            if (log.isDebugEnabled()) {
+                log.debug("getNewCID decoding " + cid + " as UTF-8 decoding 
error: " + e);
+            }
+        }
+        return cid2;
     }
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextImpl.java?rev=651600&r1=651599&r2=651600&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextImpl.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextImpl.java
 Fri Apr 25 06:16:24 2008
@@ -628,4 +628,8 @@
     public OMNamespace getNamespace() {
         return textNS;
     }
+    
+    public void setContentID(String cid) {
+        this.contentID = cid;
+    }
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java?rev=651600&r1=651599&r2=651600&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMStAXWrapper.java
 Fri Apr 25 06:16:24 2008
@@ -25,6 +25,7 @@
 import java.util.Map;
 import java.util.Stack;
 
+import javax.activation.DataHandler;
 import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 import javax.xml.stream.Location;
@@ -32,6 +33,7 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.axiom.om.OMAttachmentAccessor;
 import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMComment;
 import org.apache.axiom.om.OMConstants;
@@ -54,7 +56,8 @@
  * Note  - This class also implements the streaming constants interface to get 
access to the StAX
  * constants
  */
-public class OMStAXWrapper implements XMLStreamReader, XMLStreamConstants {
+public class OMStAXWrapper 
+    implements XMLStreamReader, XMLStreamConstants, OMAttachmentAccessor {
     
     private static final Log log = LogFactory.getLog(OMStAXWrapper.class);
     private static boolean DEBUG_ENABLED = log.isDebugEnabled();
@@ -1464,5 +1467,14 @@
             _releaseParserOnClose = value;
         }
         
+    }
+
+    public DataHandler getDataHandler(String blobcid) {
+        DataHandler dh = null;
+        if (builder != null && 
+                builder instanceof OMAttachmentAccessor) {
+            dh = ((OMAttachmentAccessor) builder).getDataHandler(blobcid);
+        }
+        return dh;
     }
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java?rev=651600&r1=651599&r2=651600&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java
 Fri Apr 25 06:16:24 2008
@@ -538,5 +538,9 @@
             this.getDataHandler();
         }
     }
+    
+    public void setContentID(String cid) {
+        this.contentID = cid;
+    }
 
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/mtom/MTOMStAXSOAPModelBuilderTest.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/mtom/MTOMStAXSOAPModelBuilderTest.java?rev=651600&r1=651599&r2=651600&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/mtom/MTOMStAXSOAPModelBuilderTest.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/mtom/MTOMStAXSOAPModelBuilderTest.java
 Fri Apr 25 06:16:24 2008
@@ -22,6 +22,7 @@
 import org.apache.axiom.attachments.Attachments;
 import org.apache.axiom.om.AbstractTestCase;
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axiom.om.OMText;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.soap.SOAP12Constants;
@@ -30,16 +31,16 @@
 import javax.activation.DataHandler;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamReader;
+
+import java.io.BufferedInputStream;
 import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.FileInputStream;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.ByteArrayInputStream;
-import java.io.BufferedInputStream;
-import java.util.Iterator;
-import java.util.Arrays;
-import java.lang.reflect.Array;
 import java.net.URLEncoder;
+import java.util.Iterator;
 
 public class MTOMStAXSOAPModelBuilderTest extends AbstractTestCase {
 
@@ -87,6 +88,53 @@
         //  object.read(actualObject,0,10);
 
         //  assertEquals("Object check", expectedObject[5],actualObject[5] );
+    }
+    
+    public void testCreateAndSerializeOptimized() throws Exception {
+        String contentTypeString =
+                "multipart/Related; charset=\"UTF-8\"; 
type=\"application/xop+xml\"; boundary=\"----=_AxIs2_Def_boundary_=42214532\"; 
start=\"SOAPPart\"";
+        String inFileName = "mtom/MTOMBuilderTestIn.txt";
+        InputStream inStream = new 
FileInputStream(getTestResourceFile(inFileName));
+        Attachments attachments = new Attachments(inStream, contentTypeString);
+        XMLStreamReader reader = XMLInputFactory.newInstance()
+                .createXMLStreamReader(new BufferedReader(new 
InputStreamReader(attachments
+                        .getSOAPPartInputStream())));
+        OMXMLParserWrapper builder = new MTOMStAXSOAPModelBuilder(reader, 
attachments,
+                                               
SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+        OMElement root = builder.getDocumentElement();
+        
+        OMOutputFormat format = new OMOutputFormat();
+        format.setDoOptimize(true);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        root.serializeAndConsume(baos, format);
+        String msg = baos.toString();
+        // Make sure there is an xop:Include element and an optimized 
attachment
+        assertTrue(msg.indexOf("xop:Include") > 0);
+        assertTrue(msg.indexOf("Content-ID: <cid:-1609420109260943731>") > 0);
+    }
+    
+    public void testCreateAndSerializeInlined() throws Exception {
+        String contentTypeString =
+                "multipart/Related; charset=\"UTF-8\"; 
type=\"application/xop+xml\"; boundary=\"----=_AxIs2_Def_boundary_=42214532\"; 
start=\"SOAPPart\"";
+        String inFileName = "mtom/MTOMBuilderTestIn.txt";
+        InputStream inStream = new 
FileInputStream(getTestResourceFile(inFileName));
+        Attachments attachments = new Attachments(inStream, contentTypeString);
+        XMLStreamReader reader = XMLInputFactory.newInstance()
+                .createXMLStreamReader(new BufferedReader(new 
InputStreamReader(attachments
+                        .getSOAPPartInputStream())));
+        OMXMLParserWrapper builder = new MTOMStAXSOAPModelBuilder(reader, 
attachments,
+                                               
SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+        OMElement root = builder.getDocumentElement();
+        
+        OMOutputFormat format = new OMOutputFormat();
+        format.setDoOptimize(false);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        root.serializeAndConsume(baos, format);
+        String msg = baos.toString();
+        // Make sure there is not an xop:Include
+        // Make sure there is not an optimized attachment
+        assertTrue(msg.indexOf("xop:Include") < 0);
+        assertTrue(msg.indexOf("Content-ID: <cid:-1609420109260943731>") < 0);
     }
 
     public void testUTF16MTOMMessage() throws Exception {

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPEnvelopeBuildTest.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPEnvelopeBuildTest.java?rev=651600&r1=651599&r2=651600&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPEnvelopeBuildTest.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPEnvelopeBuildTest.java
 Fri Apr 25 06:16:24 2008
@@ -148,8 +148,6 @@
                 MyDebugLogger log = new MyDebugLogger();
                 long length = CommonUtils.logDebug(se, log);
                 assertTrue(length > 100);
-                System.out.println(log.output);
-                System.out.println(length);
                 assertTrue(log.output.contains("x:Content"));
                            
         }


Reply via email to