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/23 16:01:41 UTC
svn commit: r193142 -
/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
Author: thilina
Date: Thu Jun 23 07:01:40 2005
New Revision: 193142
URL: http://svn.apache.org/viewcvs?rev=193142&view=rev
Log:
New OMOutputer.java class. Which will give functionality for MTOM serialising as well as normal xml serialising
Added:
webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
Added: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java?rev=193142&view=auto
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java (added)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java Thu Jun 23 07:01:40 2005
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.axis.om.impl.llom;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import javax.activation.DataHandler;
+import javax.mail.MessagingException;
+import javax.mail.internet.ContentType;
+import javax.mail.internet.MimeBodyPart;
+import javax.xml.stream.FactoryConfigurationError;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.axis.om.OMText;
+
+/**
+ * @author <a href="mailto:thilina@opensource.lk">Thilina Gunarathne </a>
+ * For the moment this assumes that transport takes the decision of whether to optimise or not
+ * by looking at whether the MTOM optimise is enabled & also looking at the OM tree whether it has any
+ * optimisable content
+ */
+
+public class OMOutputer {
+ private XMLStreamWriter xmlWriter;
+
+ private boolean doOptimise;
+
+ private OutputStream outStream;
+
+ private byte[] CRLF = { 13, 10 };
+
+ private XMLStreamWriter writer;
+
+ private LinkedList binaryNodeList;
+
+ private ByteArrayOutputStream bufferedSoapOutStream;
+
+ private String mimeBoundary = null;
+
+ private String SOAP_PART_CONTENT_ID = "<SOAPPart>";
+
+ private ContentType contentType = null;
+
+ /**
+ * @param xmlWriter
+ * if it is guaranteed for not using attachments one can use this
+ */
+ public OMOutputer(XMLStreamWriter xmlWriter) {
+ this.xmlWriter = xmlWriter;
+ }
+
+ /**
+ * @throws FactoryConfigurationError
+ * @throws XMLStreamException
+ *
+ */
+ public OMOutputer(OutputStream outStream, boolean doOptimise)
+ throws XMLStreamException, FactoryConfigurationError {
+ this.doOptimise = doOptimise;
+ this.outStream = outStream;
+ if (doOptimise) {
+ bufferedSoapOutStream = new ByteArrayOutputStream();
+ xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(
+ bufferedSoapOutStream);
+ binaryNodeList = new LinkedList();
+ } else {
+ xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(
+ outStream);
+
+ }
+
+ }
+
+ public XMLStreamWriter getXmlStreamWriter() {
+ return xmlWriter;
+ }
+
+ public void flush() throws XMLStreamException {
+ if (doOptimise) {
+ try {
+ this.complete();
+ } catch (IOException e) {
+ //TODO this is just a hack to avoid passing IOException. Must find a better way to handle this
+ throw new XMLStreamException("Error creating mime parts. Problem with Streams");
+ } catch (MessagingException e) {
+ throw new XMLStreamException("Error creating mime Body parts");
+ }
+ } else {
+ xmlWriter.flush();
+ }
+
+ }
+
+ public boolean doOptimise() {
+ return doOptimise;
+ }
+
+ public String getContentType() {
+ if (contentType == null && doOptimise) {
+ contentType = new ContentType();
+ contentType.setPrimaryType("multipart");
+ contentType.setSubType("related");
+ contentType.setParameter("boundary", getMimeBoundary());
+ contentType.setParameter("start", SOAP_PART_CONTENT_ID);
+ contentType.setParameter("type", "application/xop+xml");
+ //TODO theres something called action that can be set with
+ // following. May be SOAPAction. Better check.
+ contentType.setParameter("startinfo", "application/xop+xml");
+ }
+ return contentType.toString();
+ }
+
+ public void writeOptimised(OMText node) {
+ binaryNodeList.add(node);
+ }
+
+ public void complete() throws IOException, MessagingException, XMLStreamException {
+ startWritingMime();
+ xmlWriter.flush();
+ DataHandler dh = new DataHandler(bufferedSoapOutStream.toString(),
+ "text/xml");
+ MimeBodyPart rootMimeBodyPart = new MimeBodyPart();
+ rootMimeBodyPart.setDataHandler(dh);
+ rootMimeBodyPart.addHeader("Content-Type", "application/xop+xml");
+ rootMimeBodyPart.addHeader("Content-Transfer-Encoding", "8bit");
+ rootMimeBodyPart.addHeader("Content-ID", SOAP_PART_CONTENT_ID);
+
+ writeBodyPart(rootMimeBodyPart);
+
+ Iterator binaryNodeIterator = binaryNodeList.iterator();
+ while (binaryNodeIterator.hasNext()) {
+ OMText binaryNode = (OMText) binaryNodeIterator.next();
+ writeBodyPart(createMimeBodyPart(binaryNode));
+ }
+ finishWritingMime();
+
+ }
+
+ private MimeBodyPart createMimeBodyPart(OMText node)
+ throws MessagingException {
+ MimeBodyPart mimeBodyPart = new MimeBodyPart();
+ mimeBodyPart.setDataHandler(node.getDataHandler());
+ mimeBodyPart.addHeader("Content-Transfer-Encoding", "binary");
+ mimeBodyPart.addHeader("Content-ID", "<" + node.getContentID() + ">");
+ return mimeBodyPart;
+
+ }
+
+ private String getMimeBoundary() {
+ //TODO have to dynamically generate.
+ if (mimeBoundary == null) {
+ mimeBoundary = "----=_AxIs2_Def_boundary_=42214532";
+ }
+ return mimeBoundary;
+ }
+
+ /**
+ * @throws IOException
+ * This will write the boundary to output Stream
+ */
+ private void writeMimeBoundary() throws IOException {
+ outStream.write(new byte[] { 45, 45 });
+ outStream.write(getMimeBoundary().getBytes());
+ }
+
+ /**
+ * @throws IOException
+ * This will write the boundary with CRLF
+ */
+ private void startWritingMime() throws IOException {
+ writeMimeBoundary();
+ outStream.write(CRLF);
+ }
+
+ /**
+ * this will write a CRLF for the earlier boudary then the BodyPart data
+ * with headers followed by boundary. Writes only the boundary. No more
+ * CRLF's are wriiting after that.
+ *
+ * @throws IOException
+ * @throws MessagingException
+ */
+ private void writeBodyPart(MimeBodyPart part) throws IOException,
+ MessagingException {
+ outStream.write(CRLF);
+ part.writeTo(outStream);
+ outStream.write(CRLF);
+ writeMimeBoundary();
+ }
+
+ /**
+ * @throws IOException
+ * This will write "--" to the end of last boundary
+ */
+ private void finishWritingMime() throws IOException {
+ outStream.write(new byte[] { 45, 45 });
+ }
+
+}
\ No newline at end of file
Re: svn commit: r193142 -
/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
Posted by Sanjiva Weerawarana <sa...@opensource.lk>.
I hate the name OmOutputer (not to mention the fact that it should have
two t's ;-)). I thought the plan was to call it "OmOutput" ala SaxInput
and SaxOutput ...
Also, please s/optimise/optimize/ .. US spelling ;-). It'll take some
time but you'll get used to it ;-).
Sanjiva.
On Thu, 2005-06-23 at 14:01 +0000, thilina@apache.org wrote:
> Author: thilina
> Date: Thu Jun 23 07:01:40 2005
> New Revision: 193142
>
> URL: http://svn.apache.org/viewcvs?rev=193142&view=rev
> Log:
> New OMOutputer.java class. Which will give functionality for MTOM serialising as well as normal xml serialising
>
> Added:
> webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
>
> Added: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
> URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java?rev=193142&view=auto
> ==============================================================================
> --- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java (added)
> +++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java Thu Jun 23 07:01:40 2005
> @@ -0,0 +1,218 @@
> +/*
> + * Copyright 2004,2005 The Apache Software Foundation.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.axis.om.impl.llom;
> +
> +import java.io.ByteArrayOutputStream;
> +import java.io.IOException;
> +import java.io.OutputStream;
> +import java.util.Iterator;
> +import java.util.LinkedList;
> +
> +import javax.activation.DataHandler;
> +import javax.mail.MessagingException;
> +import javax.mail.internet.ContentType;
> +import javax.mail.internet.MimeBodyPart;
> +import javax.xml.stream.FactoryConfigurationError;
> +import javax.xml.stream.XMLOutputFactory;
> +import javax.xml.stream.XMLStreamException;
> +import javax.xml.stream.XMLStreamWriter;
> +
> +import org.apache.axis.om.OMText;
> +
> +/**
> + * @author <a href="mailto:thilina@opensource.lk">Thilina Gunarathne </a>
> + * For the moment this assumes that transport takes the decision of whether to optimise or not
> + * by looking at whether the MTOM optimise is enabled & also looking at the OM tree whether it has any
> + * optimisable content
> + */
> +
> +public class OMOutputer {
> + private XMLStreamWriter xmlWriter;
> +
> + private boolean doOptimise;
> +
> + private OutputStream outStream;
> +
> + private byte[] CRLF = { 13, 10 };
> +
> + private XMLStreamWriter writer;
> +
> + private LinkedList binaryNodeList;
> +
> + private ByteArrayOutputStream bufferedSoapOutStream;
> +
> + private String mimeBoundary = null;
> +
> + private String SOAP_PART_CONTENT_ID = "<SOAPPart>";
> +
> + private ContentType contentType = null;
> +
> + /**
> + * @param xmlWriter
> + * if it is guaranteed for not using attachments one can use this
> + */
> + public OMOutputer(XMLStreamWriter xmlWriter) {
> + this.xmlWriter = xmlWriter;
> + }
> +
> + /**
> + * @throws FactoryConfigurationError
> + * @throws XMLStreamException
> + *
> + */
> + public OMOutputer(OutputStream outStream, boolean doOptimise)
> + throws XMLStreamException, FactoryConfigurationError {
> + this.doOptimise = doOptimise;
> + this.outStream = outStream;
> + if (doOptimise) {
> + bufferedSoapOutStream = new ByteArrayOutputStream();
> + xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(
> + bufferedSoapOutStream);
> + binaryNodeList = new LinkedList();
> + } else {
> + xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(
> + outStream);
> +
> + }
> +
> + }
> +
> + public XMLStreamWriter getXmlStreamWriter() {
> + return xmlWriter;
> + }
> +
> + public void flush() throws XMLStreamException {
> + if (doOptimise) {
> + try {
> + this.complete();
> + } catch (IOException e) {
> + //TODO this is just a hack to avoid passing IOException. Must find a better way to handle this
> + throw new XMLStreamException("Error creating mime parts. Problem with Streams");
> + } catch (MessagingException e) {
> + throw new XMLStreamException("Error creating mime Body parts");
> + }
> + } else {
> + xmlWriter.flush();
> + }
> +
> + }
> +
> + public boolean doOptimise() {
> + return doOptimise;
> + }
> +
> + public String getContentType() {
> + if (contentType == null && doOptimise) {
> + contentType = new ContentType();
> + contentType.setPrimaryType("multipart");
> + contentType.setSubType("related");
> + contentType.setParameter("boundary", getMimeBoundary());
> + contentType.setParameter("start", SOAP_PART_CONTENT_ID);
> + contentType.setParameter("type", "application/xop+xml");
> + //TODO theres something called action that can be set with
> + // following. May be SOAPAction. Better check.
> + contentType.setParameter("startinfo", "application/xop+xml");
> + }
> + return contentType.toString();
> + }
> +
> + public void writeOptimised(OMText node) {
> + binaryNodeList.add(node);
> + }
> +
> + public void complete() throws IOException, MessagingException, XMLStreamException {
> + startWritingMime();
> + xmlWriter.flush();
> + DataHandler dh = new DataHandler(bufferedSoapOutStream.toString(),
> + "text/xml");
> + MimeBodyPart rootMimeBodyPart = new MimeBodyPart();
> + rootMimeBodyPart.setDataHandler(dh);
> + rootMimeBodyPart.addHeader("Content-Type", "application/xop+xml");
> + rootMimeBodyPart.addHeader("Content-Transfer-Encoding", "8bit");
> + rootMimeBodyPart.addHeader("Content-ID", SOAP_PART_CONTENT_ID);
> +
> + writeBodyPart(rootMimeBodyPart);
> +
> + Iterator binaryNodeIterator = binaryNodeList.iterator();
> + while (binaryNodeIterator.hasNext()) {
> + OMText binaryNode = (OMText) binaryNodeIterator.next();
> + writeBodyPart(createMimeBodyPart(binaryNode));
> + }
> + finishWritingMime();
> +
> + }
> +
> + private MimeBodyPart createMimeBodyPart(OMText node)
> + throws MessagingException {
> + MimeBodyPart mimeBodyPart = new MimeBodyPart();
> + mimeBodyPart.setDataHandler(node.getDataHandler());
> + mimeBodyPart.addHeader("Content-Transfer-Encoding", "binary");
> + mimeBodyPart.addHeader("Content-ID", "<" + node.getContentID() + ">");
> + return mimeBodyPart;
> +
> + }
> +
> + private String getMimeBoundary() {
> + //TODO have to dynamically generate.
> + if (mimeBoundary == null) {
> + mimeBoundary = "----=_AxIs2_Def_boundary_=42214532";
> + }
> + return mimeBoundary;
> + }
> +
> + /**
> + * @throws IOException
> + * This will write the boundary to output Stream
> + */
> + private void writeMimeBoundary() throws IOException {
> + outStream.write(new byte[] { 45, 45 });
> + outStream.write(getMimeBoundary().getBytes());
> + }
> +
> + /**
> + * @throws IOException
> + * This will write the boundary with CRLF
> + */
> + private void startWritingMime() throws IOException {
> + writeMimeBoundary();
> + outStream.write(CRLF);
> + }
> +
> + /**
> + * this will write a CRLF for the earlier boudary then the BodyPart data
> + * with headers followed by boundary. Writes only the boundary. No more
> + * CRLF's are wriiting after that.
> + *
> + * @throws IOException
> + * @throws MessagingException
> + */
> + private void writeBodyPart(MimeBodyPart part) throws IOException,
> + MessagingException {
> + outStream.write(CRLF);
> + part.writeTo(outStream);
> + outStream.write(CRLF);
> + writeMimeBoundary();
> + }
> +
> + /**
> + * @throws IOException
> + * This will write "--" to the end of last boundary
> + */
> + private void finishWritingMime() throws IOException {
> + outStream.write(new byte[] { 45, 45 });
> + }
> +
> +}
> \ No newline at end of file
>
>
>
Re: svn commit: r193142 -
/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
Posted by Sanjiva Weerawarana <sa...@opensource.lk>.
I hate the name OmOutputer (not to mention the fact that it should have
two t's ;-)). I thought the plan was to call it "OmOutput" ala SaxInput
and SaxOutput ...
Also, please s/optimise/optimize/ .. US spelling ;-). It'll take some
time but you'll get used to it ;-).
Sanjiva.
On Thu, 2005-06-23 at 14:01 +0000, thilina@apache.org wrote:
> Author: thilina
> Date: Thu Jun 23 07:01:40 2005
> New Revision: 193142
>
> URL: http://svn.apache.org/viewcvs?rev=193142&view=rev
> Log:
> New OMOutputer.java class. Which will give functionality for MTOM serialising as well as normal xml serialising
>
> Added:
> webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
>
> Added: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
> URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java?rev=193142&view=auto
> ==============================================================================
> --- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java (added)
> +++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java Thu Jun 23 07:01:40 2005
> @@ -0,0 +1,218 @@
> +/*
> + * Copyright 2004,2005 The Apache Software Foundation.
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + */
> +package org.apache.axis.om.impl.llom;
> +
> +import java.io.ByteArrayOutputStream;
> +import java.io.IOException;
> +import java.io.OutputStream;
> +import java.util.Iterator;
> +import java.util.LinkedList;
> +
> +import javax.activation.DataHandler;
> +import javax.mail.MessagingException;
> +import javax.mail.internet.ContentType;
> +import javax.mail.internet.MimeBodyPart;
> +import javax.xml.stream.FactoryConfigurationError;
> +import javax.xml.stream.XMLOutputFactory;
> +import javax.xml.stream.XMLStreamException;
> +import javax.xml.stream.XMLStreamWriter;
> +
> +import org.apache.axis.om.OMText;
> +
> +/**
> + * @author <a href="mailto:thilina@opensource.lk">Thilina Gunarathne </a>
> + * For the moment this assumes that transport takes the decision of whether to optimise or not
> + * by looking at whether the MTOM optimise is enabled & also looking at the OM tree whether it has any
> + * optimisable content
> + */
> +
> +public class OMOutputer {
> + private XMLStreamWriter xmlWriter;
> +
> + private boolean doOptimise;
> +
> + private OutputStream outStream;
> +
> + private byte[] CRLF = { 13, 10 };
> +
> + private XMLStreamWriter writer;
> +
> + private LinkedList binaryNodeList;
> +
> + private ByteArrayOutputStream bufferedSoapOutStream;
> +
> + private String mimeBoundary = null;
> +
> + private String SOAP_PART_CONTENT_ID = "<SOAPPart>";
> +
> + private ContentType contentType = null;
> +
> + /**
> + * @param xmlWriter
> + * if it is guaranteed for not using attachments one can use this
> + */
> + public OMOutputer(XMLStreamWriter xmlWriter) {
> + this.xmlWriter = xmlWriter;
> + }
> +
> + /**
> + * @throws FactoryConfigurationError
> + * @throws XMLStreamException
> + *
> + */
> + public OMOutputer(OutputStream outStream, boolean doOptimise)
> + throws XMLStreamException, FactoryConfigurationError {
> + this.doOptimise = doOptimise;
> + this.outStream = outStream;
> + if (doOptimise) {
> + bufferedSoapOutStream = new ByteArrayOutputStream();
> + xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(
> + bufferedSoapOutStream);
> + binaryNodeList = new LinkedList();
> + } else {
> + xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(
> + outStream);
> +
> + }
> +
> + }
> +
> + public XMLStreamWriter getXmlStreamWriter() {
> + return xmlWriter;
> + }
> +
> + public void flush() throws XMLStreamException {
> + if (doOptimise) {
> + try {
> + this.complete();
> + } catch (IOException e) {
> + //TODO this is just a hack to avoid passing IOException. Must find a better way to handle this
> + throw new XMLStreamException("Error creating mime parts. Problem with Streams");
> + } catch (MessagingException e) {
> + throw new XMLStreamException("Error creating mime Body parts");
> + }
> + } else {
> + xmlWriter.flush();
> + }
> +
> + }
> +
> + public boolean doOptimise() {
> + return doOptimise;
> + }
> +
> + public String getContentType() {
> + if (contentType == null && doOptimise) {
> + contentType = new ContentType();
> + contentType.setPrimaryType("multipart");
> + contentType.setSubType("related");
> + contentType.setParameter("boundary", getMimeBoundary());
> + contentType.setParameter("start", SOAP_PART_CONTENT_ID);
> + contentType.setParameter("type", "application/xop+xml");
> + //TODO theres something called action that can be set with
> + // following. May be SOAPAction. Better check.
> + contentType.setParameter("startinfo", "application/xop+xml");
> + }
> + return contentType.toString();
> + }
> +
> + public void writeOptimised(OMText node) {
> + binaryNodeList.add(node);
> + }
> +
> + public void complete() throws IOException, MessagingException, XMLStreamException {
> + startWritingMime();
> + xmlWriter.flush();
> + DataHandler dh = new DataHandler(bufferedSoapOutStream.toString(),
> + "text/xml");
> + MimeBodyPart rootMimeBodyPart = new MimeBodyPart();
> + rootMimeBodyPart.setDataHandler(dh);
> + rootMimeBodyPart.addHeader("Content-Type", "application/xop+xml");
> + rootMimeBodyPart.addHeader("Content-Transfer-Encoding", "8bit");
> + rootMimeBodyPart.addHeader("Content-ID", SOAP_PART_CONTENT_ID);
> +
> + writeBodyPart(rootMimeBodyPart);
> +
> + Iterator binaryNodeIterator = binaryNodeList.iterator();
> + while (binaryNodeIterator.hasNext()) {
> + OMText binaryNode = (OMText) binaryNodeIterator.next();
> + writeBodyPart(createMimeBodyPart(binaryNode));
> + }
> + finishWritingMime();
> +
> + }
> +
> + private MimeBodyPart createMimeBodyPart(OMText node)
> + throws MessagingException {
> + MimeBodyPart mimeBodyPart = new MimeBodyPart();
> + mimeBodyPart.setDataHandler(node.getDataHandler());
> + mimeBodyPart.addHeader("Content-Transfer-Encoding", "binary");
> + mimeBodyPart.addHeader("Content-ID", "<" + node.getContentID() + ">");
> + return mimeBodyPart;
> +
> + }
> +
> + private String getMimeBoundary() {
> + //TODO have to dynamically generate.
> + if (mimeBoundary == null) {
> + mimeBoundary = "----=_AxIs2_Def_boundary_=42214532";
> + }
> + return mimeBoundary;
> + }
> +
> + /**
> + * @throws IOException
> + * This will write the boundary to output Stream
> + */
> + private void writeMimeBoundary() throws IOException {
> + outStream.write(new byte[] { 45, 45 });
> + outStream.write(getMimeBoundary().getBytes());
> + }
> +
> + /**
> + * @throws IOException
> + * This will write the boundary with CRLF
> + */
> + private void startWritingMime() throws IOException {
> + writeMimeBoundary();
> + outStream.write(CRLF);
> + }
> +
> + /**
> + * this will write a CRLF for the earlier boudary then the BodyPart data
> + * with headers followed by boundary. Writes only the boundary. No more
> + * CRLF's are wriiting after that.
> + *
> + * @throws IOException
> + * @throws MessagingException
> + */
> + private void writeBodyPart(MimeBodyPart part) throws IOException,
> + MessagingException {
> + outStream.write(CRLF);
> + part.writeTo(outStream);
> + outStream.write(CRLF);
> + writeMimeBoundary();
> + }
> +
> + /**
> + * @throws IOException
> + * This will write "--" to the end of last boundary
> + */
> + private void finishWritingMime() throws IOException {
> + outStream.write(new byte[] { 45, 45 });
> + }
> +
> +}
> \ No newline at end of file
>
>
>
Re: [Do not commit without running All test!]Re: svn commit: r193142 - /webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
Posted by Thilina Gunarathne <cs...@gmail.com>.
Extremely sorry for wat happened.
Build is fixed.
I did run maven for my local build. But did not update at the last moment.
So this cause some conflicts. :((
regards,
~Thilina
On 6/24/05, Srinath perera <he...@opensource.lk> wrote:
>
> Hi Thilina;
> This commit breaks the build! apperantly reason been some test cases are
> not updated according to OMOutputter.
>
> Please.. Please do not commit without running maven and make sure build
> works. I come here and update my changed code becouse I have better
> faith in my co developers. Now I am stuck till this is fixed as I have
> no way of continue. I also want to check my build and check in the
> changes.
>
> Please be careful in the future
> Thanks
> Srinath
>
>
> On Thu, 2005-06-23 at 14:01 +0000, thilina@apache.org wrote:
> > Author: thilina
> > Date: Thu Jun 23 07:01:40 2005
> > New Revision: 193142
> >
> > URL: http://svn.apache.org/viewcvs?rev=193142&view=rev
> > Log:
> > New OMOutputer.java class. Which will give functionality for MTOM
> serialising as well as normal xml serialising
> >
> > Added:
> >
> webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
> >
> > Added:
> webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
> > URL:
> http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java?rev=193142&view=auto
> >
> ==============================================================================
> > ---
> webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
> (added)
> > +++
> webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMOutputer.java
> Thu Jun 23 07:01:40 2005
> > @@ -0,0 +1,218 @@
> > +/*
> > + * Copyright 2004,2005 The Apache Software Foundation.
> > + *
> > + * Licensed under the Apache License, Version 2.0 (the "License");
> > + * you may not use this file except in compliance with the License.
> > + * You may obtain a copy of the License at
> > + *
> > + * http://www.apache.org/licenses/LICENSE-2.0
> > + *
> > + * Unless required by applicable law or agreed to in writing, software
> > + * distributed under the License is distributed on an "AS IS" BASIS,
> > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> > + * See the License for the specific language governing permissions and
> > + * limitations under the License.
> > + */
> > +package org.apache.axis.om.impl.llom;
> > +
> > +import java.io.ByteArrayOutputStream;
> > +import java.io.IOException;
> > +import java.io.OutputStream;
> > +import java.util.Iterator;
> > +import java.util.LinkedList;
> > +
> > +import javax.activation.DataHandler;
> > +import javax.mail.MessagingException;
> > +import javax.mail.internet.ContentType;
> > +import javax.mail.internet.MimeBodyPart;
> > +import javax.xml.stream.FactoryConfigurationError;
> > +import javax.xml.stream.XMLOutputFactory;
> > +import javax.xml.stream.XMLStreamException;
> > +import javax.xml.stream.XMLStreamWriter;
> > +
> > +import org.apache.axis.om.OMText;
> > +
> > +/**
> > + * @author <a href="mailto:thilina@opensource.lk">Thilina Gunarathne
> </a>
> > + * For the moment this assumes that transport takes the decision of
> whether to optimise or not
> > + * by looking at whether the MTOM optimise is enabled & also looking at
> the OM tree whether it has any
> > + * optimisable content
> > + */
> > +
> > +public class OMOutputer {
> > + private XMLStreamWriter xmlWriter;
> > +
> > + private boolean doOptimise;
> > +
> > + private OutputStream outStream;
> > +
> > + private byte[] CRLF = { 13, 10 };
> > +
> > + private XMLStreamWriter writer;
> > +
> > + private LinkedList binaryNodeList;
> > +
> > + private ByteArrayOutputStream bufferedSoapOutStream;
> > +
> > + private String mimeBoundary = null;
> > +
> > + private String SOAP_PART_CONTENT_ID = "<SOAPPart>";
> > +
> > + private ContentType contentType = null;
> > +
> > + /**
> > + * @param xmlWriter
> > + * if it is guaranteed for not using attachments one can use this
> > + */
> > + public OMOutputer(XMLStreamWriter xmlWriter) {
> > + this.xmlWriter = xmlWriter;
> > + }
> > +
> > + /**
> > + * @throws FactoryConfigurationError
> > + * @throws XMLStreamException
> > + *
> > + */
> > + public OMOutputer(OutputStream outStream, boolean doOptimise)
> > + throws XMLStreamException, FactoryConfigurationError {
> > + this.doOptimise = doOptimise;
> > + this.outStream = outStream;
> > + if (doOptimise) {
> > + bufferedSoapOutStream = new ByteArrayOutputStream();
> > + xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(
> > + bufferedSoapOutStream);
> > + binaryNodeList = new LinkedList();
> > + } else {
> > + xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(
> > + outStream);
> > +
> > + }
> > +
> > + }
> > +
> > + public XMLStreamWriter getXmlStreamWriter() {
> > + return xmlWriter;
> > + }
> > +
> > + public void flush() throws XMLStreamException {
> > + if (doOptimise) {
> > + try {
> > + this.complete();
> > + } catch (IOException e) {
> > + //TODO this is just a hack to avoid passing IOException. Must find a
> better way to handle this
> > + throw new XMLStreamException("Error creating mime parts. Problem with
> Streams");
> > + } catch (MessagingException e) {
> > + throw new XMLStreamException("Error creating mime Body parts");
> > + }
> > + } else {
> > + xmlWriter.flush();
> > + }
> > +
> > + }
> > +
> > + public boolean doOptimise() {
> > + return doOptimise;
> > + }
> > +
> > + public String getContentType() {
> > + if (contentType == null && doOptimise) {
> > + contentType = new ContentType();
> > + contentType.setPrimaryType("multipart");
> > + contentType.setSubType("related");
> > + contentType.setParameter("boundary", getMimeBoundary());
> > + contentType.setParameter("start", SOAP_PART_CONTENT_ID);
> > + contentType.setParameter("type", "application/xop+xml");
> > + //TODO theres something called action that can be set with
> > + // following. May be SOAPAction. Better check.
> > + contentType.setParameter("startinfo", "application/xop+xml");
> > + }
> > + return contentType.toString();
> > + }
> > +
> > + public void writeOptimised(OMText node) {
> > + binaryNodeList.add(node);
> > + }
> > +
> > + public void complete() throws IOException, MessagingException,
> XMLStreamException {
> > + startWritingMime();
> > + xmlWriter.flush();
> > + DataHandler dh = new DataHandler(bufferedSoapOutStream.toString(),
> > + "text/xml");
> > + MimeBodyPart rootMimeBodyPart = new MimeBodyPart();
> > + rootMimeBodyPart.setDataHandler(dh);
> > + rootMimeBodyPart.addHeader("Content-Type", "application/xop+xml");
> > + rootMimeBodyPart.addHeader("Content-Transfer-Encoding", "8bit");
> > + rootMimeBodyPart.addHeader("Content-ID", SOAP_PART_CONTENT_ID);
> > +
> > + writeBodyPart(rootMimeBodyPart);
> > +
> > + Iterator binaryNodeIterator = binaryNodeList.iterator();
> > + while (binaryNodeIterator.hasNext()) {
> > + OMText binaryNode = (OMText) binaryNodeIterator.next();
> > + writeBodyPart(createMimeBodyPart(binaryNode));
> > + }
> > + finishWritingMime();
> > +
> > + }
> > +
> > + private MimeBodyPart createMimeBodyPart(OMText node)
> > + throws MessagingException {
> > + MimeBodyPart mimeBodyPart = new MimeBodyPart();
> > + mimeBodyPart.setDataHandler(node.getDataHandler());
> > + mimeBodyPart.addHeader("Content-Transfer-Encoding", "binary");
> > + mimeBodyPart.addHeader("Content-ID", "<" + node.getContentID() + ">");
> > + return mimeBodyPart;
> > +
> > + }
> > +
> > + private String getMimeBoundary() {
> > + //TODO have to dynamically generate.
> > + if (mimeBoundary == null) {
> > + mimeBoundary = "----=_AxIs2_Def_boundary_=42214532";
> > + }
> > + return mimeBoundary;
> > + }
> > +
> > + /**
> > + * @throws IOException
> > + * This will write the boundary to output Stream
> > + */
> > + private void writeMimeBoundary() throws IOException {
> > + outStream.write(new byte[] { 45, 45 });
> > + outStream.write(getMimeBoundary().getBytes());
> > + }
> > +
> > + /**
> > + * @throws IOException
> > + * This will write the boundary with CRLF
> > + */
> > + private void startWritingMime() throws IOException {
> > + writeMimeBoundary();
> > + outStream.write(CRLF);
> > + }
> > +
> > + /**
> > + * this will write a CRLF for the earlier boudary then the BodyPart
> data
> > + * with headers followed by boundary. Writes only the boundary. No more
> > + * CRLF's are wriiting after that.
> > + *
> > + * @throws IOException
> > + * @throws MessagingException
> > + */
> > + private void writeBodyPart(MimeBodyPart part) throws IOException,
> > + MessagingException {
> > + outStream.write(CRLF);
> > + part.writeTo(outStream);
> > + outStream.write(CRLF);
> > + writeMimeBoundary();
> > + }
> > +
> > + /**
> > + * @throws IOException
> > + * This will write "--" to the end of last boundary
> > + */
> > + private void finishWritingMime() throws IOException {
> > + outStream.write(new byte[] { 45, 45 });
> > + }
> > +
> > +}
> > \ No newline at end of file
> >
> >
> >
>
>
--
"May the SourcE be with u"