You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by sc...@apache.org on 2010/09/22 18:35:29 UTC
svn commit: r1000074 - in /axis/axis2/java/core/trunk/modules/kernel:
src/org/apache/axis2/transport/http/SOAPMessageFormatter.java
src/org/apache/axis2/util/Utils.java test/org/apache/axis2/misc/MiscTest.java
Author: scheu
Date: Wed Sep 22 16:35:29 2010
New Revision: 1000074
URL: http://svn.apache.org/viewvc?rev=1000074&view=rev
Log:
AXIS2-4828
Committer:Rich Scheuerle
Summary:
Changed SOAPMessageFormatter to use an OutputStream to buffer the data. This will allow components to access
the OutputStream.
Added a unit validation test.
Modified:
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/SOAPMessageFormatter.java
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/Utils.java
axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/misc/MiscTest.java
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/SOAPMessageFormatter.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/SOAPMessageFormatter.java?rev=1000074&r1=1000073&r2=1000074&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/SOAPMessageFormatter.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/transport/http/SOAPMessageFormatter.java Wed Sep 22 16:35:29 2010
@@ -65,13 +65,22 @@ public class SOAPMessageFormatter implem
try {
if (!(format.isOptimized()) && format.isDoingSWA()) {
- StringWriter bufferedSOAPBody = new StringWriter();
+ // Write the SOAPBody to an output stream
+ // (We prefer an OutputStream because it is faster)
+ if (log.isDebugEnabled()) {
+ log.debug("Doing SWA and the format is not optimized. Buffer the SOAPBody in an OutputStream");
+ }
+ ByteArrayOutputStream bufferedSOAPBodyBAOS = new ByteArrayOutputStream();
if (preserve) {
- element.serialize(bufferedSOAPBody, format);
+ element.serialize(bufferedSOAPBodyBAOS, format);
} else {
- element.serializeAndConsume(bufferedSOAPBody, format);
+ element.serializeAndConsume(bufferedSOAPBodyBAOS, format);
}
- writeSwAMessage(msgCtxt, bufferedSOAPBody, out, format);
+ // Convert the ByteArrayOutputStream to StreamWriter so that SWA can
+ // be added.
+ String bufferedSOAPBody = Utils.BAOS2String(bufferedSOAPBodyBAOS, format.getCharSetEncoding());
+ StringWriter bufferedSOAPBodySW = Utils.String2StringWriter(bufferedSOAPBody);
+ writeSwAMessage(msgCtxt, bufferedSOAPBodySW, out, format);
} else {
if (preserve) {
element.serialize(out, format);
@@ -100,12 +109,17 @@ public class SOAPMessageFormatter implem
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
if (!format.isOptimized()) {
if (format.isDoingSWA()) {
+ if (log.isDebugEnabled()) {
+ log.debug("Doing SWA and the format is not optimized. Buffer the SOAPBody in an OutputStream");
+ }
// Why are we creating a new OMOutputFormat
OMOutputFormat format2 = new OMOutputFormat();
format2.setCharSetEncoding(format.getCharSetEncoding());
- StringWriter bufferedSOAPBody = new StringWriter();
- element.serializeAndConsume(bufferedSOAPBody, format2);
- writeSwAMessage(msgCtxt, bufferedSOAPBody, bytesOut, format);
+ ByteArrayOutputStream bufferedSOAPBodyBAOS = new ByteArrayOutputStream();
+ element.serializeAndConsume(bufferedSOAPBodyBAOS, format2);
+ String bufferedSOAPBody = Utils.BAOS2String(bufferedSOAPBodyBAOS, format2.getCharSetEncoding());
+ StringWriter bufferedSOAPBodySW = Utils.String2StringWriter(bufferedSOAPBody);
+ writeSwAMessage(msgCtxt, bufferedSOAPBodySW, bytesOut, format);
} else {
element.serializeAndConsume(bytesOut, format);
}
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/Utils.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/Utils.java?rev=1000074&r1=1000073&r2=1000074&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/Utils.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/Utils.java Wed Sep 22 16:35:29 2010
@@ -57,7 +57,11 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.xml.namespace.QName;
+
+import java.io.ByteArrayOutputStream;
import java.io.File;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedExceptionAction;
@@ -653,6 +657,36 @@ public class Utils {
private static boolean isIP(String hostAddress) {
return hostAddress.split("[.]").length == 4;
}
+
+ /**
+ * Convert ByteArrayOutputStream to String
+ * @param baos ByteArrayOutputStream
+ * @param charset
+ * @return String
+ */
+ public static String BAOS2String(ByteArrayOutputStream baos, String charset) {
+ try {
+ return baos.toString(charset);
+ } catch (UnsupportedEncodingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * Convert String into a StringWriter
+ * @param input String
+ * @return StringWriter
+ */
+ public static StringWriter String2StringWriter(String input) {
+ StringWriter sw = null;
+ if (input == null || input.length() == 0) {
+ sw = new StringWriter();
+ } else {
+ sw = new StringWriter(input.length());
+ sw.append(input);
+ }
+ return sw;
+ }
/**
* Get the scheme part from a URI (or URL).
Modified: axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/misc/MiscTest.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/misc/MiscTest.java?rev=1000074&r1=1000073&r2=1000074&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/misc/MiscTest.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/test/org/apache/axis2/misc/MiscTest.java Wed Sep 22 16:35:29 2010
@@ -21,7 +21,10 @@ package org.apache.axis2.misc;
import org.apache.axis2.AbstractTestCase;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.util.Utils;
+import java.io.ByteArrayOutputStream;
+import java.io.StringWriter;
import java.lang.reflect.InvocationTargetException;
public class MiscTest extends AbstractTestCase {
@@ -41,4 +44,24 @@ public class MiscTest extends AbstractTe
e = new AxisFault("");
}
+ public void testStringWriterConversion() throws Exception {
+ String input = " Some text \u00df with \u00fc special \u00f6 chars \u00e4. \n";
+
+ String charset = "utf-8";
+ byte[] bytes = input.getBytes(charset);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ baos.write(bytes);
+ baos.flush();
+ StringWriter sw = Utils.String2StringWriter(Utils.BAOS2String(baos, charset));
+ assertTrue(input.equals(sw.toString()));
+
+ charset = "utf-16";
+ bytes = input.getBytes(charset);
+ baos = new ByteArrayOutputStream();
+ baos.write(bytes);
+ baos.flush();
+ sw = Utils.String2StringWriter(Utils.BAOS2String(baos, charset));
+ assertTrue(input.equals(sw.toString()));
+
+ }
}