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 th...@apache.org on 2007/01/16 10:28:54 UTC

svn commit: r496636 - in /webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom: attachments/ om/impl/ om/impl/builder/

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: commons-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: commons-dev-help@ws.apache.org