Author: sagara Date: Sat Oct 29 19:08:15 2011 New Revision: 1194977 URL: http://svn.apache.org/viewvc?rev=1194977&view=rev Log: Fixed - AXIS2-3933 Ported MultipartFormDataFormatter to use Axiom MultipartWriter. Deprecated ComplexPart class.
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/MultipartFormDataFormatter.java axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/ComplexPart.java axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/MultipartFormDataFormatterTest.java Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/MultipartFormDataFormatter.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/MultipartFormDataFormatter.java?rev=1194977&r1=1194976&r2=1194977&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/MultipartFormDataFormatter.java (original) +++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/MultipartFormDataFormatter.java Sat Oct 29 19:08:15 2011 @@ -23,19 +23,16 @@ import org.apache.axiom.om.OMAbstractFac import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMOutputFormat; +import org.apache.axiom.om.impl.OMMultipartWriter; import org.apache.axis2.AxisFault; import org.apache.axis2.context.MessageContext; import org.apache.axis2.transport.MessageFormatter; -import org.apache.axis2.transport.http.util.ComplexPart; import org.apache.axis2.transport.http.util.URLTemplatingUtil; -import org.apache.commons.httpclient.methods.multipart.Part; -import org.apache.commons.httpclient.methods.multipart.StringPart; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URL; -import java.util.ArrayList; import java.util.Iterator; /** @@ -85,23 +82,14 @@ public class MultipartFormDataFormatter * message format. */ public byte[] getBytes(MessageContext messageContext, OMOutputFormat format) throws AxisFault { - OMElement omElement = messageContext.getEnvelope().getBody().getFirstElement(); - - Part[] parts = createMultipatFormDataRequest(omElement); - if (parts.length > 0) { - ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); - try { - - // This is accessing a class of Commons-FlieUpload - Part.sendParts(bytesOut, parts, format.getMimeBoundary().getBytes()); - } catch (IOException e) { - throw AxisFault.makeFault(e); - } + ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); + try { + createMultipatFormDataRequest(omElement, bytesOut, format); return bytesOut.toByteArray(); - } - - return new byte[0]; //To change body of implemented methods use File | Settings | File Templates. + } catch (IOException e) { + throw new AxisFault(e.getMessage()); + } } /** @@ -175,14 +163,18 @@ public class MultipartFormDataFormatter /** * @param dataOut + * @param bytesOut + * @param format * @return + * @throws IOException */ - private Part[] createMultipatFormDataRequest(OMElement dataOut) { - ArrayList parts = new ArrayList(); + private void createMultipatFormDataRequest(OMElement dataOut, ByteArrayOutputStream bytesOut, + OMOutputFormat format) throws IOException { if (dataOut != null) { Iterator iter1 = dataOut.getChildElements(); OMFactory omFactory = OMAbstractFactory.getOMFactory(); - while (iter1.hasNext()) { + OMMultipartWriter writer = new OMMultipartWriter(bytesOut, format); + while (iter1.hasNext()) { OMElement ele = (OMElement) iter1.next(); Iterator iter2 = ele.getChildElements(); // check whether the element is a complex type @@ -190,15 +182,20 @@ public class MultipartFormDataFormatter OMElement omElement = omFactory.createOMElement(ele.getQName().getLocalPart(), null); omElement.addChild( - processComplexType(omElement, ele.getChildElements(), omFactory)); - parts.add(new ComplexPart(ele.getQName().getLocalPart(), omElement.toString())); + processComplexType(omElement, ele.getChildElements(), omFactory)); + OutputStream partOutputStream = writer.writePart(DEFAULT_CONTENT_TYPE, null, + DISPOSITION_TYPE, "name=\"" + omElement.getLocalName() + "\""); + partOutputStream.write(omElement.toString().getBytes()); + partOutputStream.close(); } else { - parts.add(new StringPart(ele.getQName().getLocalPart(), ele.getText())); + OutputStream partOutputStream = writer.writePart(DEFAULT_CONTENT_TYPE, null, + DISPOSITION_TYPE, "name=\"" + ele.getLocalName() + "\""); + partOutputStream.write(ele.getText().getBytes()); + partOutputStream.close(); } } + writer.complete(); } - Part[] partsArray = new Part[parts.size()]; - return (Part[]) parts.toArray(partsArray); } /** @@ -224,4 +221,8 @@ public class MultipartFormDataFormatter } return omElement; } + + public static final String DEFAULT_CONTENT_TYPE = "text/plain; charset=US-ASCII"; + public static final String DISPOSITION_TYPE = "form-data"; + } Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/ComplexPart.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/ComplexPart.java?rev=1194977&r1=1194976&r2=1194977&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/ComplexPart.java (original) +++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/util/ComplexPart.java Sat Oct 29 19:08:15 2011 @@ -19,13 +19,14 @@ package org.apache.axis2.transport.http.util; -import org.apache.commons.httpclient.methods.multipart.PartBase; -import org.apache.commons.httpclient.util.EncodingUtil; +//import org.apache.commons.httpclient.methods.multipart.PartBase; +//import org.apache.commons.httpclient.util.EncodingUtil; import java.io.IOException; import java.io.OutputStream; -public class ComplexPart extends PartBase { +@Deprecated +public class ComplexPart /* extends PartBase */ { /** * Default content encoding of string parameters. @@ -62,12 +63,12 @@ public class ComplexPart extends PartBas */ public ComplexPart(String name, String value, String charset) { - super( - name, - DEFAULT_CONTENT_TYPE, - charset == null ? DEFAULT_CHARSET : charset, - DEFAULT_TRANSFER_ENCODING - ); +// super( +// name, +// DEFAULT_CONTENT_TYPE, +// charset == null ? DEFAULT_CHARSET : charset, +// DEFAULT_TRANSFER_ENCODING +// ); if (value == null) { throw new IllegalArgumentException("Value may not be null"); } @@ -96,7 +97,7 @@ public class ComplexPart extends PartBas */ private byte[] getContent() { if (content == null) { - content = EncodingUtil.getBytes(value, getCharSet()); +// content = EncodingUtil.getBytes(value, getCharSet()); } return content; } @@ -126,7 +127,7 @@ public class ComplexPart extends PartBas * @see org.apache.commons.httpclient.methods.multipart.BasePart#setCharSet(java.lang.String) */ public void setCharSet(String charSet) { - super.setCharSet(charSet); +// super.setCharSet(charSet); this.content = null; } Modified: axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/MultipartFormDataFormatterTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/MultipartFormDataFormatterTest.java?rev=1194977&r1=1194976&r2=1194977&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/MultipartFormDataFormatterTest.java (original) +++ axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/transport/http/MultipartFormDataFormatterTest.java Sat Oct 29 19:08:15 2011 @@ -89,7 +89,7 @@ public class MultipartFormDataFormatterT message.contains("Content-Disposition: form-data; name=\"part2\"")); assertTrue("Can not find the content", message.contains("Content-Type: text/plain; charset=US-ASCII")); - assertTrue("Can not find the content", message.contains("Content-Transfer-Encoding: 8bit")); + //assertTrue("Can not find the content", message.contains("Content-Transfer-Encoding: 8bit")); assertTrue("Can not find the content", message.contains("sample data part 1")); assertTrue("Can not find the content", message.contains("sample data part 2")); @@ -110,7 +110,7 @@ public class MultipartFormDataFormatterT message.contains("Content-Disposition: form-data; name=\"part2\"")); assertTrue("Can not find the content", message.contains("Content-Type: text/plain; charset=US-ASCII")); - assertTrue("Can not find the content", message.contains("Content-Transfer-Encoding: 8bit")); + //assertTrue("Can not find the content", message.contains("Content-Transfer-Encoding: 8bit")); assertTrue("Can not find the content", message.contains("sample data part 1")); assertTrue("Can not find the content", message.contains("sample data part 2")); }