You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by th...@apache.org on 2005/06/22 06:08:17 UTC

svn commit: r191759 - in /webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom: MTOMStAXSOAPModelBuilder.java MTOMXMLStreamWriter.java

Author: thilina
Date: Tue Jun 21 21:08:15 2005
New Revision: 191759

URL: http://svn.apache.org/viewcvs?rev=191759&view=rev
Log:
changes due to merging OMBlob & OMText

Modified:
    webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom/MTOMStAXSOAPModelBuilder.java
    webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom/MTOMXMLStreamWriter.java

Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom/MTOMStAXSOAPModelBuilder.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom/MTOMStAXSOAPModelBuilder.java?rev=191759&r1=191758&r2=191759&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom/MTOMStAXSOAPModelBuilder.java (original)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom/MTOMStAXSOAPModelBuilder.java Tue Jun 21 21:08:15 2005
@@ -16,15 +16,7 @@
  */
 package org.apache.axis.om.impl.llom.mtom;
 
-import java.util.LinkedList;
-import java.util.ListIterator;
-
 import javax.activation.DataHandler;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
-import javax.mail.internet.MimePartDataSource;
 import javax.xml.stream.XMLStreamReader;
 
 import org.apache.axis.attachments.MIMEHelper;
@@ -40,72 +32,47 @@
 import org.apache.commons.logging.LogFactory;
 
 /**
- * @author Thilina Gunarathne thilina@opensource.lk
+ * @author <a href="mailto:thilina@opensource.lk">Thilina Gunarathne </a>
  */
+
 public class MTOMStAXSOAPModelBuilder extends StAXSOAPModelBuilder {
 	private Log log = LogFactory.getLog(getClass());
-
+	
 	/**
 	 * <code>mimeHelper</code> handles deffered parsing of incoming MIME
 	 * Messages
 	 */
 	MIMEHelper mimeHelper;
-
-	LinkedList mimeBodyPartsList;
-
-	MimeMessage mimeMessage;
-
+	
 	int partIndex = 0;
-
 	
-	public MTOMStAXSOAPModelBuilder(XMLStreamReader parser,SOAPFactory factory, MIMEHelper mimeHelper)
-	{
-		super(parser,factory);
-		this.mimeHelper=  mimeHelper;
+	public MTOMStAXSOAPModelBuilder(XMLStreamReader parser,
+			SOAPFactory factory, MIMEHelper mimeHelper) {
+		super(parser, factory);
+		this.mimeHelper = mimeHelper;
 	}
 	
-
 	/**
 	 * @param reader
 	 * @param mimeHelper2
 	 */
-	public MTOMStAXSOAPModelBuilder(XMLStreamReader reader, MIMEHelper mimeHelper) {
+	public MTOMStAXSOAPModelBuilder(XMLStreamReader reader,
+			MIMEHelper mimeHelper) {
 		super(reader);
 		this.mimeHelper = mimeHelper;
 	}
-
-	/*
-	 * private XMLStreamReader getParserFromMime() throws OMException {
-	 * mimeBodyPartsList = new LinkedList(); Properties props = new
-	 * Properties(); javax.mail.Session session =
-	 * javax.mail.Session.getInstance(props, null); try { mimeMessage = new
-	 * MimeMessage(session, inStream);
-	 * 
-	 * MimeBodyPart rootMimeBodyPart;
-	 * 
-	 * rootMimeBodyPart = getRootMimeBodyPart(); return
-	 * XMLInputFactory.newInstance().createXMLStreamReader(
-	 * rootMimeBodyPart.getInputStream());
-	 *  } catch (IOException e1) { throw new OMException(e1.toString());
-	 *  } catch (MessagingException e) { throw new OMException( "Message
-	 * identified as MTOM optimised doesn't contain a valid MIME Stream" +
-	 * e.toString()); } catch (XMLStreamException e) { throw new OMException(
-	 * "SOAP Message contained within Mime root is invalid " + e.toString()); }
-	 * catch (FactoryConfigurationError e) { throw new OMException( "SOAP
-	 * Message contained within Mime root is invalid" + e.toString()); }
-	 *  }
-	 */
+	
 	protected OMNode createOMElement() throws OMException {
-
+		
 		String elementName = parser.getLocalName();
-
+		
 		String namespaceURI = parser.getNamespaceURI();
-
+		
 		// create an OMBlob if the element is an <xop:Include>
 		if (elementName.equalsIgnoreCase("Include")
 				& namespaceURI
-						.equalsIgnoreCase("http://www.w3.org/2004/08/xop/include")) {
-
+				.equalsIgnoreCase("http://www.w3.org/2004/08/xop/include")) {
+			
 			OMText node;
 			String contentID = null;
 			String contentIDName = null;
@@ -113,7 +80,7 @@
 			if (lastNode == null) {
 				// Decide whether to ckeck the level >3 or not
 				throw new OMException(
-						"XOP:Include element is not supported here");
+				"XOP:Include element is not supported here");
 			}
 			if (parser.getAttributeCount() > 0) {
 				contentID = parser.getAttributeValue(0);
@@ -124,15 +91,15 @@
 					contentID = contentID.substring(4);
 				} else {
 					throw new OMException(
-							"contentID not Found in XOP:Include element");
+					"contentID not Found in XOP:Include element");
 				}
 			} else {
 				throw new OMException(
-						"Href attribute not found in XOP:Include element");
+				"Href attribute not found in XOP:Include element");
 			}
-
+			
 			if (lastNode.isComplete()) {
-				node = new OMTextImpl(contentID, lastNode.getParent(),this);
+				node = new OMTextImpl(contentID, lastNode.getParent(), this);
 				lastNode.setNextSibling(node);
 				node.setPreviousSibling(lastNode);
 			} else {
@@ -141,7 +108,7 @@
 				e.setFirstChild(node);
 			}
 			return node;
-
+			
 		} else {
 			OMElement node;
 			if (lastNode == null) {
@@ -155,84 +122,17 @@
 				node = constructNode((OMElement) lastNode, elementName, false);
 				e.setFirstChild(node);
 			}
-
+			
 			// fill in the attributes
 			processAttributes(node);
-			log.info("Build the OMElelment {" + node.getLocalName() + '}'
-					+ node.getLocalName() + "By the StaxSOAPModelBuilder");
+			//TODO Exception when trying to log . check this
+			//			log.info("Build the OMElelment {" + node.getLocalName() + '}'
+			//					+ node.getLocalName() + "By the StaxSOAPModelBuilder");
 			return node;
 		}
 	}
-
+	
 	public DataHandler getDataHandler(String blobContentID) throws OMException {
-		/*
-		 * First checks whether the part is already parsed by checking the parts
-		 * linked list. If it is not parsed yet then call the getnextPart() till
-		 * we find the required part.
-		 */
-		MimeBodyPart mimeBodyPart;
-
-		boolean attachmentFound = false;
-		ListIterator partsIterator = mimeBodyPartsList.listIterator();
-		try {
-			while (partsIterator.hasNext()) {
-				mimeBodyPart = (MimeBodyPart) partsIterator.next();
-				if (blobContentID.equals(mimeBodyPart.getContentID())) {
-					attachmentFound = true;
-					DataHandler dh = mimeBodyPart.getDataHandler();
-					return dh;
-				}
-			}
-			while (!attachmentFound) {
-				mimeBodyPart = this.getNextMimeBodyPart();
-
-				if (mimeBodyPart == null) {
-					break;
-				}
-				String partContentID = mimeBodyPart.getContentID();
-				String delimitedBlobContentID = "<" + blobContentID + ">";
-				if (delimitedBlobContentID.equals(partContentID)) {
-					attachmentFound = true;
-					DataHandler dh = mimeBodyPart.getDataHandler();
-					return dh;
-				}
-			}
-			return null;
-		} catch (MessagingException e) {
-			throw new OMException("Invalid Mime Message " + e.toString());
-		}
-	}
-
-	private MimeBodyPart getMimeBodyPart() throws MessagingException {
-		MimeBodyPart mimeBodyPart = null;
-
-		DataHandler dh = mimeMessage.getDataHandler();
-		MimeMultipart multiPart = new MimeMultipart((MimePartDataSource) dh
-				.getDataSource());
-		mimeBodyPart = (MimeBodyPart) multiPart.getBodyPart(partIndex);
-
-		partIndex++;
-		return mimeBodyPart;
-	}
-
-	private MimeBodyPart getRootMimeBodyPart() throws MessagingException {
-		MimeBodyPart rootMimeBodyPart;
-		if (mimeBodyPartsList.isEmpty()) {
-			rootMimeBodyPart = getMimeBodyPart();
-			mimeBodyPartsList.add(rootMimeBodyPart);
-		} else {
-			rootMimeBodyPart = (MimeBodyPart) mimeBodyPartsList.getFirst();
-		}
-		return rootMimeBodyPart;
-	}
-
-	private MimeBodyPart getNextMimeBodyPart() throws MessagingException {
-		MimeBodyPart nextMimeBodyPart;
-		nextMimeBodyPart = getMimeBodyPart();
-		if (nextMimeBodyPart != null) {
-			mimeBodyPartsList.add(nextMimeBodyPart);
-			return nextMimeBodyPart;
-		} else
-			return null;
+		return mimeHelper.getDataHandler(blobContentID);
 	}
 }

Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom/MTOMXMLStreamWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom/MTOMXMLStreamWriter.java?rev=191759&r1=191758&r2=191759&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom/MTOMXMLStreamWriter.java (original)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/mtom/MTOMXMLStreamWriter.java Tue Jun 21 21:08:15 2005
@@ -24,6 +24,7 @@
 import java.util.Random;
 
 import javax.activation.DataHandler;
+import javax.mail.internet.ContentType;
 import javax.mail.internet.MimeBodyPart;
 import javax.mail.internet.MimeMultipart;
 import javax.xml.namespace.NamespaceContext;
@@ -34,406 +35,412 @@
 
 import org.apache.axis.om.OMText;
 
-
 /**
- * @author Thilina Gunarathne thilina@opensource.lk
+ * @author <a href="mailto:thilina@opensource.lk">Thilina Gunarathne </a>
  */
+
 public class MTOMXMLStreamWriter implements XMLStreamWriter {
 
-    OutputStream outStream;
+	OutputStream outStream;
 
-    XMLStreamWriter writer;
+	XMLStreamWriter writer;
 
-    Random rnd;
+	Random rnd;
 
-    LinkedList binaryNodeList;
+	LinkedList binaryNodeList;
 
-    ByteArrayOutputStream bufferedSoapOutStream;
-
-    public static String[] filter = new String[] { "Message-ID" }; // to filter
-                                                                   // the
-                                                                   // message ID
-                                                                   // header
-
-    public MTOMXMLStreamWriter(OutputStream outStream)
-            throws XMLStreamException, FactoryConfigurationError {
-        super();
-        this.outStream = outStream;
-
-        bufferedSoapOutStream = new ByteArrayOutputStream();
-
-        writer = XMLOutputFactory.newInstance().createXMLStreamWriter(
-                bufferedSoapOutStream);
-        binaryNodeList = new LinkedList();
-        rnd = new Random();
-
-    }
-
-    public void writeOptimised(OMText node) {
-        binaryNodeList.add(node);
-    }
-
-    private MimeBodyPart createMimeBodyPart(OMText node)
-            throws Exception {
-        MimeBodyPart mimeBodyPart = new MimeBodyPart();
-        mimeBodyPart.setDataHandler(node.getDataHandler());
-        mimeBodyPart.addHeader("Content-Transfer-Encoding", "binary");
-        mimeBodyPart.addHeader("Content-ID", "<" + node.getContentID()+ ">");
-        return mimeBodyPart;
-
-    }
-
-    public void complete() throws Exception {
-        DataHandler dh = new DataHandler(bufferedSoapOutStream.toString(),
-                "text/xml");
-        MimeBodyPart mimeBodyPart = new MimeBodyPart();
-        mimeBodyPart.setDataHandler(dh);
-        mimeBodyPart.addHeader("Content-Type", "application/xop+xml");
-        mimeBodyPart.addHeader("Content-Transfer-Encoding", "8bit");
-        String contentID = "<http://example.org/my.hsh>";
-        mimeBodyPart.addHeader("Content-ID", contentID);
-
-        Properties props = new Properties();
-        javax.mail.Session session = javax.mail.Session
-                .getInstance(props, null);
-        javax.mail.internet.MimeMessage mimeMessage = new javax.mail.internet.MimeMessage(
-                session);
-        MimeMultipart multipartMessage = new MimeMultipart("Related");
-        multipartMessage.addBodyPart(mimeBodyPart);
-
-        Iterator binaryNodeIterator = binaryNodeList.iterator();
-        while (binaryNodeIterator.hasNext()) {
-            OMText binaryNode = (OMText) binaryNodeIterator.next();
-            multipartMessage
-                    .addBodyPart(createMimeBodyPart(binaryNode));
-        }
-        mimeMessage.setContent(multipartMessage);
-        mimeMessage.writeTo(outStream, filter);
-    }
-
-    public void writeStartElement(String localName) throws XMLStreamException {
-        writer.writeStartElement(localName);
-    }
-
-    public void writeStartElement(String namespaceURI, String localName)
-            throws XMLStreamException {
-        writer.writeStartElement(namespaceURI, localName);
-
-    }
-
-    public void writeStartElement(String prefix, String localName,
-            String namespaceURI) throws XMLStreamException {
-        writer.writeStartElement(prefix, localName, namespaceURI);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeEmptyElement(java.lang.String,
-     *      java.lang.String)
-     */
-    public void writeEmptyElement(String namespaceURI, String localName)
-            throws XMLStreamException {
-        writer.writeEmptyElement(namespaceURI, localName);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeEmptyElement(java.lang.String,
-     *      java.lang.String, java.lang.String)
-     */
-    public void writeEmptyElement(String prefix, String localName,
-            String namespaceURI) throws XMLStreamException {
-        writer.writeEmptyElement(prefix, localName, namespaceURI);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeEmptyElement(java.lang.String)
-     */
-    public void writeEmptyElement(String localName) throws XMLStreamException {
-        writer.writeEmptyElement(localName);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeEndElement()
-     */
-    public void writeEndElement() throws XMLStreamException {
-        writer.writeEndElement();
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeEndDocument()
-     */
-    public void writeEndDocument() throws XMLStreamException {
-        writer.writeEndDocument();
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#close()
-     */
-    public void close() throws XMLStreamException {
-        writer.close();
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#flush()
-     */
-    public void flush() throws XMLStreamException {
-        writer.flush();
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeAttribute(java.lang.String,
-     *      java.lang.String)
-     */
-    public void writeAttribute(String localName, String value)
-            throws XMLStreamException {
-        writer.writeAttribute(localName, value);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeAttribute(java.lang.String,
-     *      java.lang.String, java.lang.String, java.lang.String)
-     */
-    public void writeAttribute(String prefix, String namespaceURI,
-            String localName, String value) throws XMLStreamException {
-        writer.writeAttribute(prefix, namespaceURI, localName, value);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeAttribute(java.lang.String,
-     *      java.lang.String, java.lang.String)
-     */
-    public void writeAttribute(String namespaceURI, String localName,
-            String value) throws XMLStreamException {
-        writer.writeAttribute(namespaceURI, localName, value);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeNamespace(java.lang.String,
-     *      java.lang.String)
-     */
-    public void writeNamespace(String prefix, String namespaceURI)
-            throws XMLStreamException {
-        writer.writeNamespace(prefix, namespaceURI);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeDefaultNamespace(java.lang.String)
-     */
-    public void writeDefaultNamespace(String namespaceURI)
-            throws XMLStreamException {
-        writer.writeDefaultNamespace(namespaceURI);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeComment(java.lang.String)
-     */
-    public void writeComment(String data) throws XMLStreamException {
-        writer.writeComment(data);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeProcessingInstruction(java.lang.String)
-     */
-    public void writeProcessingInstruction(String target)
-            throws XMLStreamException {
-        writer.writeProcessingInstruction(target);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeProcessingInstruction(java.lang.String,
-     *      java.lang.String)
-     */
-    public void writeProcessingInstruction(String target, String data)
-            throws XMLStreamException {
-        writer.writeProcessingInstruction(target, data);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeCData(java.lang.String)
-     */
-    public void writeCData(String data) throws XMLStreamException {
-        writer.writeCData(data);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeDTD(java.lang.String)
-     */
-    public void writeDTD(String dtd) throws XMLStreamException {
-        writer.writeDTD(dtd);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeEntityRef(java.lang.String)
-     */
-    public void writeEntityRef(String name) throws XMLStreamException {
-        writer.writeEntityRef(name);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeStartDocument()
-     */
-    public void writeStartDocument() throws XMLStreamException {
-        writer.writeStartDocument();
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeStartDocument(java.lang.String)
-     */
-    public void writeStartDocument(String version) throws XMLStreamException {
-        writer.writeStartDocument(version);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeStartDocument(java.lang.String,
-     *      java.lang.String)
-     */
-    public void writeStartDocument(String encoding, String version)
-            throws XMLStreamException {
-        writer.writeStartDocument(encoding, version);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeCharacters(java.lang.String)
-     */
-    public void writeCharacters(String text) throws XMLStreamException {
-        writer.writeCharacters(text);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#writeCharacters(char[], int, int)
-     */
-    public void writeCharacters(char[] text, int start, int len)
-            throws XMLStreamException {
-        writer.writeCharacters(text, start, len);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#getPrefix(java.lang.String)
-     */
-    public String getPrefix(String uri) throws XMLStreamException {
-
-        return writer.getPrefix(uri);
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#setPrefix(java.lang.String,
-     *      java.lang.String)
-     */
-    public void setPrefix(String prefix, String uri) throws XMLStreamException {
-        writer.setPrefix(prefix, uri);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#setDefaultNamespace(java.lang.String)
-     */
-    public void setDefaultNamespace(String uri) throws XMLStreamException {
-        writer.setDefaultNamespace(uri);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#setNamespaceContext(javax.xml.namespace.NamespaceContext)
-     */
-    public void setNamespaceContext(NamespaceContext context)
-            throws XMLStreamException {
-        writer.setNamespaceContext(context);
-
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#getNamespaceContext()
-     */
-    public NamespaceContext getNamespaceContext() {
-
-        return writer.getNamespaceContext();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see javax.xml.stream.XMLStreamWriter#getProperty(java.lang.String)
-     */
-    public Object getProperty(String name) throws IllegalArgumentException {
+	ByteArrayOutputStream bufferedSoapOutStream;
+
+	public static String[] filter = new String[] { "Message-ID", "MIME-Version" }; // to filter
+
+	// the
+	// message ID
+	// header
+
+	public MTOMXMLStreamWriter(OutputStream outStream)
+			throws XMLStreamException, FactoryConfigurationError {
+		super();
+		this.outStream = outStream;
+
+		bufferedSoapOutStream = new ByteArrayOutputStream();
+
+		writer = XMLOutputFactory.newInstance().createXMLStreamWriter(
+				bufferedSoapOutStream);
+		binaryNodeList = new LinkedList();
+		rnd = new Random();
+
+	}
+
+	public void writeOptimised(OMText node) {
+		binaryNodeList.add(node);
+	}
+
+	private MimeBodyPart createMimeBodyPart(OMText node) throws Exception {
+		MimeBodyPart mimeBodyPart = new MimeBodyPart();
+		mimeBodyPart.setDataHandler(node.getDataHandler());
+		mimeBodyPart.addHeader("Content-Transfer-Encoding", "binary");
+		mimeBodyPart.addHeader("Content-ID", "<" + node.getContentID() + ">");
+		return mimeBodyPart;
+
+	}
+
+	public void complete() throws Exception {
+		DataHandler dh = new DataHandler(bufferedSoapOutStream.toString(),
+				"text/xml");
+		MimeBodyPart mimeBodyPart = new MimeBodyPart();
+		mimeBodyPart.setDataHandler(dh);
+		mimeBodyPart.addHeader("Content-Type", "application/xop+xml");
+		mimeBodyPart.addHeader("Content-Transfer-Encoding", "8bit");
+		String soapPartContentID = "<SOAP part>";
+		mimeBodyPart.addHeader("Content-ID", soapPartContentID);
+
+		Properties props = new Properties();
+		javax.mail.Session session = javax.mail.Session
+				.getInstance(props, null);
+		javax.mail.internet.MimeMessage mimeMessage = new javax.mail.internet.MimeMessage(
+				session);
+		MimeMultipart multipartMessage = new MimeMultipart("Related");
+		multipartMessage.addBodyPart(mimeBodyPart);
+
+		Iterator binaryNodeIterator = binaryNodeList.iterator();
+		while (binaryNodeIterator.hasNext()) {
+			OMText binaryNode = (OMText) binaryNodeIterator.next();
+			multipartMessage.addBodyPart(createMimeBodyPart(binaryNode));
+		}
+		String ct = multipartMessage.getContentType();
+		ContentType contentType = new ContentType(ct);
+		contentType.setParameter("start", soapPartContentID);
+		contentType.setParameter("type", "application/xop+xml");
+
+		mimeMessage.setContent(multipartMessage);
+		//String ct  = mimeMessage.getContentType();
+		mimeMessage.setHeader("Content-Type", contentType.toString());
+		mimeMessage.writeTo(outStream, filter);
+	}
+
+	public void writeStartElement(String localName) throws XMLStreamException {
+		writer.writeStartElement(localName);
+	}
+
+	public void writeStartElement(String namespaceURI, String localName)
+			throws XMLStreamException {
+		writer.writeStartElement(namespaceURI, localName);
+
+	}
+
+	public void writeStartElement(String prefix, String localName,
+			String namespaceURI) throws XMLStreamException {
+		writer.writeStartElement(prefix, localName, namespaceURI);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeEmptyElement(java.lang.String,
+	 *      java.lang.String)
+	 */
+	public void writeEmptyElement(String namespaceURI, String localName)
+			throws XMLStreamException {
+		writer.writeEmptyElement(namespaceURI, localName);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeEmptyElement(java.lang.String,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public void writeEmptyElement(String prefix, String localName,
+			String namespaceURI) throws XMLStreamException {
+		writer.writeEmptyElement(prefix, localName, namespaceURI);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeEmptyElement(java.lang.String)
+	 */
+	public void writeEmptyElement(String localName) throws XMLStreamException {
+		writer.writeEmptyElement(localName);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeEndElement()
+	 */
+	public void writeEndElement() throws XMLStreamException {
+		writer.writeEndElement();
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeEndDocument()
+	 */
+	public void writeEndDocument() throws XMLStreamException {
+		writer.writeEndDocument();
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#close()
+	 */
+	public void close() throws XMLStreamException {
+		writer.close();
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#flush()
+	 */
+	public void flush() throws XMLStreamException {
+		writer.flush();
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeAttribute(java.lang.String,
+	 *      java.lang.String)
+	 */
+	public void writeAttribute(String localName, String value)
+			throws XMLStreamException {
+		writer.writeAttribute(localName, value);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeAttribute(java.lang.String,
+	 *      java.lang.String, java.lang.String, java.lang.String)
+	 */
+	public void writeAttribute(String prefix, String namespaceURI,
+			String localName, String value) throws XMLStreamException {
+		writer.writeAttribute(prefix, namespaceURI, localName, value);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeAttribute(java.lang.String,
+	 *      java.lang.String, java.lang.String)
+	 */
+	public void writeAttribute(String namespaceURI, String localName,
+			String value) throws XMLStreamException {
+		writer.writeAttribute(namespaceURI, localName, value);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeNamespace(java.lang.String,
+	 *      java.lang.String)
+	 */
+	public void writeNamespace(String prefix, String namespaceURI)
+			throws XMLStreamException {
+		writer.writeNamespace(prefix, namespaceURI);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeDefaultNamespace(java.lang.String)
+	 */
+	public void writeDefaultNamespace(String namespaceURI)
+			throws XMLStreamException {
+		writer.writeDefaultNamespace(namespaceURI);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeComment(java.lang.String)
+	 */
+	public void writeComment(String data) throws XMLStreamException {
+		writer.writeComment(data);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeProcessingInstruction(java.lang.String)
+	 */
+	public void writeProcessingInstruction(String target)
+			throws XMLStreamException {
+		writer.writeProcessingInstruction(target);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeProcessingInstruction(java.lang.String,
+	 *      java.lang.String)
+	 */
+	public void writeProcessingInstruction(String target, String data)
+			throws XMLStreamException {
+		writer.writeProcessingInstruction(target, data);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeCData(java.lang.String)
+	 */
+	public void writeCData(String data) throws XMLStreamException {
+		writer.writeCData(data);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeDTD(java.lang.String)
+	 */
+	public void writeDTD(String dtd) throws XMLStreamException {
+		writer.writeDTD(dtd);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeEntityRef(java.lang.String)
+	 */
+	public void writeEntityRef(String name) throws XMLStreamException {
+		writer.writeEntityRef(name);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeStartDocument()
+	 */
+	public void writeStartDocument() throws XMLStreamException {
+		writer.writeStartDocument();
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeStartDocument(java.lang.String)
+	 */
+	public void writeStartDocument(String version) throws XMLStreamException {
+		writer.writeStartDocument(version);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeStartDocument(java.lang.String,
+	 *      java.lang.String)
+	 */
+	public void writeStartDocument(String encoding, String version)
+			throws XMLStreamException {
+		writer.writeStartDocument(encoding, version);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeCharacters(java.lang.String)
+	 */
+	public void writeCharacters(String text) throws XMLStreamException {
+		writer.writeCharacters(text);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#writeCharacters(char[], int, int)
+	 */
+	public void writeCharacters(char[] text, int start, int len)
+			throws XMLStreamException {
+		writer.writeCharacters(text, start, len);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#getPrefix(java.lang.String)
+	 */
+	public String getPrefix(String uri) throws XMLStreamException {
+
+		return writer.getPrefix(uri);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#setPrefix(java.lang.String,
+	 *      java.lang.String)
+	 */
+	public void setPrefix(String prefix, String uri) throws XMLStreamException {
+		writer.setPrefix(prefix, uri);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#setDefaultNamespace(java.lang.String)
+	 */
+	public void setDefaultNamespace(String uri) throws XMLStreamException {
+		writer.setDefaultNamespace(uri);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#setNamespaceContext(javax.xml.namespace.NamespaceContext)
+	 */
+	public void setNamespaceContext(NamespaceContext context)
+			throws XMLStreamException {
+		writer.setNamespaceContext(context);
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#getNamespaceContext()
+	 */
+	public NamespaceContext getNamespaceContext() {
+
+		return writer.getNamespaceContext();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.xml.stream.XMLStreamWriter#getProperty(java.lang.String)
+	 */
+	public Object getProperty(String name) throws IllegalArgumentException {
 
-        return writer.getProperty(name);
-    }
+		return writer.getProperty(name);
+	}
 }