Author: thilina
Date: Tue Jan 16 01:28:53 2007
New Revision: 496636

URL: http://svn.apache.org/viewvc?view=rev&rev=496636
Log:
Adding the MIME Part content-encoding,content-type,content-id configurability 
support
Adding new getMessageType method to the OMBuilder


Added:
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/ConfigurableDataHandler.java
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/builder/OMBuilder.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java

Added: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/ConfigurableDataHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/ConfigurableDataHandler.java?view=auto&rev=496636
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/ConfigurableDataHandler.java
 (added)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/ConfigurableDataHandler.java
 Tue Jan 16 01:28:53 2007
@@ -0,0 +1,76 @@
+package org.apache.axiom.attachments;
+
+import java.net.URL;
+
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+
+/**
+ * This Axiom DataHandler inplementation allows the user to set custom values
+ * for the following MIME body part headers. 
+ *    <ul><li>content-id</li> 
+ *    <li>content-transfer-encoding</li> 
+ *    <li>content-type</li>
+ *    </ul> 
+ * <p>Data written to the MIME part gets encoded by content-transfer-encoding 
+ * specified as above</p>
+ * 
+ * <p>Usage is Similar to the javax.activation.DataHandler except for the 
setting
+ * of the above properties. </p>
+ * <p>eg: </p>
+ * <p>    dataHandler = new ConfigurableDataHandler(new 
ByteArrayDataSource(byteArray));</p>
+ * <p>    dataHandler.setTransferEncoding("quoted-printable");</p>
+ * <p>    dataHandler.setContentType("image/jpg");</p>
+ * 
+ * @see javax.activation.DataHandler
+ */
+public class ConfigurableDataHandler extends DataHandler {
+       
+       private String transferEncoding;
+       
+       private String contentType;
+       
+       private String contentID;
+
+       public ConfigurableDataHandler(DataSource arg0) {
+               super(arg0);
+       }
+
+       public ConfigurableDataHandler(Object arg0, String arg1) {
+               super(arg0, arg1);
+       }
+
+       public ConfigurableDataHandler(URL arg0) {
+               super(arg0);
+       }
+
+       public String getContentID() {
+               return contentID;
+       }
+
+       public void setContentID(String contentID) {
+               this.contentID = contentID;
+       }
+
+       public String getContentType() {
+               if (contentType != null) {
+                       return contentType;
+               } else {
+                       return super.getContentType();
+               }
+
+       }
+
+       public void setContentType(String contentType) {
+               this.contentType = contentType;
+       }
+
+       public String getTransferEncoding() {
+               return transferEncoding;
+       }
+
+       public void setTransferEncoding(String transferEncoding) {
+               this.transferEncoding = transferEncoding;
+       }
+
+}

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?view=diff&rev=496636&r1=496635&r2=496636
==============================================================================
--- 
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 Jan 16 01:28:53 2007
@@ -28,6 +28,7 @@
 import javax.mail.internet.MimeBodyPart;
 
 import org.apache.axiom.attachments.Attachments;
+import org.apache.axiom.attachments.ConfigurableDataHandler;
 import org.apache.axiom.om.OMConstants;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMOutputFormat;
@@ -73,20 +74,28 @@
         }
     }
 
-    public static MimeBodyPart createMimeBodyPart(String contentID, 
DataHandler dataHandler)
-            throws MessagingException {
-        MimeBodyPart mimeBodyPart = new MimeBodyPart();
-        mimeBodyPart.setDataHandler(dataHandler);
-        mimeBodyPart.addHeader("content-id", "<"+contentID+">");
-        mimeBodyPart.addHeader("content-type", dataHandler.getContentType());
-        mimeBodyPart.addHeader("content-transfer-encoding", "binary");
-        return mimeBodyPart;
-
-    }
+    public static MimeBodyPart createMimeBodyPart(String contentID,
+                       DataHandler dataHandler) throws MessagingException {
+               String encoding = null;
+               MimeBodyPart mimeBodyPart = new MimeBodyPart();
+               mimeBodyPart.setDataHandler(dataHandler);
+               mimeBodyPart.addHeader("content-id", "<" + contentID + ">");
+               mimeBodyPart.addHeader("content-type", 
dataHandler.getContentType());
+               if (dataHandler instanceof ConfigurableDataHandler) {
+                       ConfigurableDataHandler configurableDataHandler = 
(ConfigurableDataHandler) dataHandler;
+                       encoding = 
configurableDataHandler.getTransferEncoding();
+               }
+               if (encoding == null) {
+                       encoding = "binary";
+               }
+               mimeBodyPart.addHeader("content-transfer-encoding", encoding);
+               return mimeBodyPart;
+       }
 
     /**
-     * @throws IOException This will write the boundary to output Stream
-     */
+        * @throws IOException
+        *             This will write the boundary to output Stream
+        */
     public static void writeMimeBoundary(OutputStream outStream,
                                          String boundary) throws IOException {
         outStream.write(new byte[]{45, 45});
@@ -163,6 +172,76 @@
                                writeBodyPart(outputStream, 
createMimeBodyPart(contentID,
                                                dataHandler), 
format.getMimeBoundary());
                        }
+                       finishWritingMime(outputStream);
+               } catch (IOException e) {
+                       throw new OMException("Error while writing to the 
OutputStream.", e);
+               } catch (MessagingException e) {
+                       throw new OMException("Problem writing Mime Parts.", e);
+               }
+       }
+    
+    /**
+        * Pack all the attachments in to a multipart/related MIME part and 
attachs
+        * it as the second MIME Part of MIME message
+        * 
+        * @param writer
+        * @param outputStream
+        * @param attachments
+        * @param format
+        * @param innerBoundary
+        */
+    public static void writeMM7Message(StringWriter writer,
+                       OutputStream outputStream, Attachments attachments, 
OMOutputFormat format, String innerPartCID,String innerBoundary) {
+               String SOAPContentType;
+               try {
+                       if (format.isSOAP11()) {
+                               SOAPContentType = 
SOAP11Constants.SOAP_11_CONTENT_TYPE;
+                       } else {
+                               SOAPContentType = 
SOAP12Constants.SOAP_12_CONTENT_TYPE;
+                       }
+                       startWritingMime(outputStream, 
format.getMimeBoundary());
+
+                       javax.activation.DataHandler dh = new 
javax.activation.DataHandler(
+                                       writer.toString(), "text/xml; charset="
+                                                       + 
format.getCharSetEncoding());
+                       MimeBodyPart rootMimeBodyPart = new MimeBodyPart();
+                       rootMimeBodyPart.setDataHandler(dh);
+
+                       rootMimeBodyPart.addHeader("content-type",
+                                       SOAPContentType+"; charset="+ 
format.getCharSetEncoding());
+                       rootMimeBodyPart.addHeader("content-transfer-encoding", 
"8bit");
+                       rootMimeBodyPart.addHeader("content-id", "<"
+                                       + format.getRootContentId() + ">");
+
+                       writeBodyPart(outputStream, rootMimeBodyPart, format
+                                       .getMimeBoundary());
+
+                       outputStream.write(CRLF);  
+                   StringBuffer sb = new StringBuffer();
+                   sb.append("content-type: multipart/related");
+                   sb.append("; ");
+                   sb.append("boundary=");
+                   sb.append("\""+innerBoundary+"\"");
+                   outputStream.write(sb.toString().getBytes());
+                   outputStream.write(CRLF);   
+                   StringBuffer sb1 = new StringBuffer();
+                   sb1.append("content-id: ");
+                   sb1.append("<");
+                   sb1.append(innerPartCID);
+                   sb1.append(">");
+                       outputStream.write(sb1.toString().getBytes());
+                   outputStream.write(CRLF);
+                       startWritingMime(outputStream, innerBoundary);
+                       Iterator attachmentIDIterator = 
attachments.getContentIDSet().iterator();
+                       while (attachmentIDIterator.hasNext()) {
+                               String contentID = (String) 
attachmentIDIterator.next();
+                               DataHandler dataHandler = 
attachments.getDataHandler(contentID);
+                               writeBodyPart(outputStream, 
createMimeBodyPart(contentID,
+                                               dataHandler), innerBoundary);
+                       }
+                       finishWritingMime(outputStream);
+                       outputStream.write(CRLF);
+                       writeMimeBoundary(outputStream, 
format.getMimeBoundary());
                        finishWritingMime(outputStream);
                } catch (IOException e) {
                        throw new OMException("Error while writing to the 
OutputStream.", e);

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/OMBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/OMBuilder.java?view=diff&rev=496636&r1=496635&r2=496636
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/OMBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/OMBuilder.java
 Tue Jan 16 01:28:53 2007
@@ -1,12 +1,19 @@
 package org.apache.axiom.om.impl.builder;
 
+import java.io.InputStream;
+
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMException;
 
 public interface OMBuilder {
+       
+       public void init(InputStream inputStream) throws OMException;
     /**
      * @return Returns the document element.
      */
-    OMElement getDocumentElement();
+       public OMElement getDocumentElement();
+    
+       public String getMessageType();
     
-    String getCharsetEncoding();
+       public String getCharsetEncoding();
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java?view=diff&rev=496636&r1=496635&r2=496636
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
 Tue Jan 16 01:28:53 2007
@@ -16,10 +16,13 @@
 
 package org.apache.axiom.om.impl.builder;
 
+import java.io.InputStream;
+
 import org.apache.axiom.om.*;
 import org.apache.axiom.om.impl.OMNodeEx;
 import org.apache.axiom.om.impl.OMContainerEx;
 import org.apache.axiom.om.impl.util.OMSerializerUtil;
+import org.apache.axiom.om.util.StAXUtils;
 
 import javax.xml.stream.XMLStreamConstants;
 import javax.xml.stream.XMLStreamReader;
@@ -107,6 +110,22 @@
     protected StAXBuilder(XMLStreamReader parser) {
         this(OMAbstractFactory.getOMFactory(), parser);
     }
+    
+    /**
+     * Init() *must* be called after creating the builder using this 
constructor.
+     */
+    protected StAXBuilder()
+    {
+    }
+    public void init (InputStream inputStream) throws OMException
+    {
+        try {
+                       this.parser = 
StAXUtils.createXMLStreamReader(inputStream);
+               } catch (XMLStreamException e1) {
+                       throw new OMException(e1);
+               }
+        omfactory = OMAbstractFactory.getOMFactory();
+    }
 
     /**
      * Method setOMBuilderFactory.
@@ -481,5 +500,10 @@
         } catch (XMLStreamException e) {
             throw new RuntimeException(e);
         }
+    }
+    
+    public String getMessageType()
+    {
+       return null;
     }
 }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java?view=diff&rev=496636&r1=496635&r2=496636
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
 Tue Jan 16 01:28:53 2007
@@ -79,14 +79,6 @@
     }
 
     /**
-     * @param inStream - instream which contains the XML
-     * @throws XMLStreamException
-     */
-    public StAXOMBuilder(InputStream inStream) throws XMLStreamException {
-        this(StAXUtils.createXMLStreamReader(inStream));
-    }
-
-    /**
      * Constructor StAXOMBuilder.
      *
      * @param parser
@@ -95,6 +87,24 @@
         super(parser);
         omfactory = OMAbstractFactory.getOMFactory();
         document = omfactory.createOMDocument(this);
+        doDebug = log.isDebugEnabled();
+    }
+
+    /**
+     * @param inStream - instream which contains the XML
+     * @throws XMLStreamException
+     */
+    public StAXOMBuilder(InputStream inStream) throws XMLStreamException {
+        this(StAXUtils.createXMLStreamReader(inStream));
+    }
+    
+    /**
+     * Init() *must* be called after creating the builder using this 
constructor.
+     * @param inStream - instream which contains the XML
+     * @throws XMLStreamException
+     */
+    public StAXOMBuilder() throws XMLStreamException {
+        super();
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to