You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by di...@apache.org on 2008/02/20 05:30:08 UTC

svn commit: r629349 - in /webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl: MIMEOutputUtils.java MTOMXMLStreamWriter.java

Author: dims
Date: Tue Feb 19 20:30:07 2008
New Revision: 629349

URL: http://svn.apache.org/viewvc?rev=629349&view=rev
Log:
[Performance] - Don't create an unnecessary string again, pass the byte array directly. Use ByteArrayDataSource with the byte array. Internally this avoids a lookup/load of DataContentHandler from the mailcap file as well. Please keep an eye out for breaking tests...

Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java?rev=629349&r1=629348&r2=629349&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MIMEOutputUtils.java Tue Feb 19 20:30:07 2008
@@ -31,6 +31,7 @@
 
 import org.apache.axiom.attachments.Attachments;
 import org.apache.axiom.attachments.ConfigurableDataHandler;
+import org.apache.axiom.attachments.ByteArrayDataSource;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axiom.om.OMText;
@@ -47,6 +48,8 @@
     private static byte[] CRLF = { 13, 10 };
 
     /**
+     * @deprecated is anyone really using this?
+     * 
      * Invoked by MTOMXMLStreamWriter to write the SOAP Part and the attachemts
      * @param outStream OutputStream target
      * @param bufferedXML String containing XML of SOAPPart
@@ -106,6 +109,68 @@
     }
     
     /**
+     * Invoked by MTOMXMLStreamWriter to write the SOAP Part and the attachements. 
+     * 
+     * @param outStream OutputStream target
+     * @param bufferedXML String containing XML of SOAPPart
+     * @param binaryNodeList Text nodes with the attachment Data Handlers
+     * @param boundary Boundary String
+     * @param contentId Content-ID of SOAPPart
+     * @param charSetEncoding Character Encoding of SOAPPart
+     * @param SOAPContentType Content-Type of SOAPPart
+     */
+    public static void complete(OutputStream outStream, 
+                                byte[] xmlData,
+                                LinkedList binaryNodeList, 
+                                String boundary, 
+                                String contentId,
+                                String charSetEncoding, 
+                                String SOAPContentType) {
+        try {
+            // TODO: Instead of buffering the SOAPPart contents, it makes more
+            // sense to split this method in two.  Write out the SOAPPart headers
+            // and later write out the attachments.  This will avoid the cost and
+            // space of buffering.
+            
+            // Write out the mime boundary
+            startWritingMime(outStream, boundary);
+
+            javax.activation.DataHandler dh = 
+                new javax.activation.DataHandler(new ByteArrayDataSource(xmlData,
+                                                 "text/xml; charset=" + charSetEncoding));
+            MimeBodyPart rootMimeBodyPart = new MimeBodyPart();
+            rootMimeBodyPart.setDataHandler(dh);
+
+            rootMimeBodyPart.addHeader("Content-Type",
+                                       "application/xop+xml; charset=" + charSetEncoding +
+                                               "; type=\"" + SOAPContentType + "\"");
+            rootMimeBodyPart.addHeader("Content-Transfer-Encoding", "binary");
+            rootMimeBodyPart.addHeader("Content-ID", "<" + contentId + ">");
+
+            // Write out the SOAPPart
+            writeBodyPart(outStream, rootMimeBodyPart, boundary);
+
+            // Now write out the Attachment parts (which are represented by the
+            // text nodes int the binary node list)
+            Iterator binaryNodeIterator = binaryNodeList.iterator();
+            while (binaryNodeIterator.hasNext()) {
+                OMText binaryNode = (OMText) binaryNodeIterator.next();
+                writeBodyPart(outStream, createMimeBodyPart(binaryNode
+                        .getContentID(), (DataHandler) binaryNode
+                        .getDataHandler()), boundary);
+            }
+            finishWritingMime(outStream);
+            outStream.flush();
+        } catch (IOException e) {
+            throw new OMException("Error while writing to the OutputStream.", e);
+        } catch (MessagingException e) {
+            throw new OMException("Problem writing Mime Parts.", e);
+        }
+    }
+
+    /**
+     * @deprecated - is anyone really using this?
+     * 
      * Write the SOAPPart and attachments
      * @param outStream
      * @param writer

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java?rev=629349&r1=629348&r2=629349&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java Tue Feb 19 20:30:07 2008
@@ -25,6 +25,7 @@
 import org.apache.axiom.om.util.StAXUtils;
 import org.apache.axiom.soap.SOAP11Constants;
 import org.apache.axiom.soap.SOAP12Constants;
+import org.apache.axiom.attachments.ByteArrayDataSource;
 
 import javax.xml.namespace.NamespaceContext;
 import javax.xml.stream.FactoryConfigurationError;
@@ -149,10 +150,8 @@
                 SOAPContentType = SOAP12Constants.SOAP_12_CONTENT_TYPE;
             }
             try {
-                String bufferedXMLText =
-                        new String(bufferedXML.toByteArray(), format.getCharSetEncoding());
                 MIMEOutputUtils.complete(outStream,
-                                         bufferedXMLText,
+                                         bufferedXML.toByteArray(),
                                          binaryNodeList,
                                          format.getMimeBoundary(),
                                          format.getRootContentId(),



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