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