Author: veithen
Date: Sun Jun 7 23:07:33 2009
New Revision: 782477
URL: http://svn.apache.org/viewvc?rev=782477&view=rev
Log:
Fixed bug in chunked encoding.
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/ChunkedEncoder.java
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/InterceptorTest.java
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/TestUtil.java
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/ChunkedEncoder.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/ChunkedEncoder.java?rev=782477&r1=782476&r2=782477&view=diff
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/ChunkedEncoder.java
(original)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/ChunkedEncoder.java
Sun Jun 7 23:07:33 2009
@@ -28,12 +28,13 @@
public void invoke(Stream stream) {
int av = stream.available();
if (av > 0 || stream.isEndOfStream()) {
- stream.skipAll();
StreamUtil.insertAsciiString(stream, "\r\n");
StreamUtil.insertAsciiString(stream, Integer.toString(av, 16));
StreamUtil.insertAsciiString(stream, "\r\n");
if (av == 0) {
StreamUtil.insertAsciiString(stream, "\r\n");
+ } else {
+ stream.skipAll();
}
}
}
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java?rev=782477&r1=782476&r2=782477&view=diff
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java
(original)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/main/java/org/apache/ws/commons/tcpmon/core/filter/http/HttpFilter.java
Sun Jun 7 23:07:33 2009
@@ -100,9 +100,7 @@
}
case STATE_CONTENT: {
if (transferDecoder != null) {
- Stream decoderStream =
- decode ? stream : new ReadOnlyStream(stream);
- if (transferDecoder.process(decoderStream)) {
+ if (transferDecoder.process(stream)) {
state = STATE_COMPLETE;
if (contentFilterChain != null) {
for (int i=0; i<contentFilterChain.length;
i++) {
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/InterceptorTest.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/InterceptorTest.java?rev=782477&r1=782476&r2=782477&view=diff
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/InterceptorTest.java
(original)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/InterceptorTest.java
Sun Jun 7 23:07:33 2009
@@ -25,14 +25,13 @@
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
import org.apache.ws.commons.tcpmon.core.filter.ReplaceFilter;
import org.apache.ws.commons.tcpmon.core.filter.StreamFilter;
import org.apache.ws.commons.tcpmon.core.filter.mime.ContentFilterFactory;
import org.mortbay.jetty.Server;
public class InterceptorTest extends TestCase {
- public void testWithContentFilter() throws Exception {
+ private void testWithContentFilter(boolean chunked) throws Exception {
Server server = TestUtil.createServer(5555);
server.start();
@@ -56,7 +55,7 @@
HttpClient client = TestUtil.createClient(config);
HttpPost request = new HttpPost(TestUtil.getBaseUri(config, server) +
"/echo");
- request.setEntity(new StringEntity("test-pattern-test"));
+ request.setEntity(TestUtil.createStringEntity("test-pattern-test",
"utf-8", chunked));
HttpResponse response = client.execute(request);
assertEquals("test-replacement-test",
TestUtil.getResponseAsString(response));
@@ -64,4 +63,12 @@
server.stop();
}
+
+ public void testWithContentFilterNotChunked() throws Exception {
+ testWithContentFilter(false);
+ }
+
+ public void testWithContentFilterChunked() throws Exception {
+ testWithContentFilter(true);
+ }
}
Modified:
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/TestUtil.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/TestUtil.java?rev=782477&r1=782476&r2=782477&view=diff
==============================================================================
---
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/TestUtil.java
(original)
+++
webservices/commons/trunk/modules/tcpmon/modules/tcpmon-core/src/test/java/org/apache/ws/commons/tcpmon/core/engine/TestUtil.java
Sun Jun 7 23:07:33 2009
@@ -16,15 +16,22 @@
package org.apache.ws.commons.tcpmon.core.engine;
+import java.io.ByteArrayInputStream;
import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
import org.apache.commons.io.IOUtils;
+import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.params.ConnRoutePNames;
+import org.apache.http.entity.AbstractHttpEntity;
+import org.apache.http.entity.InputStreamEntity;
+import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
+import org.apache.http.protocol.HTTP;
import org.mortbay.http.HttpContext;
import org.mortbay.http.SocketListener;
import org.mortbay.jetty.Server;
@@ -72,4 +79,14 @@
in.close();
}
}
+
+ public static HttpEntity createStringEntity(String s, String charset,
boolean chunked) throws UnsupportedEncodingException {
+ if (chunked) {
+ AbstractHttpEntity entity = new InputStreamEntity(new
ByteArrayInputStream(s.getBytes(charset)), -1);
+ entity.setContentType(HTTP.PLAIN_TEXT_TYPE + HTTP.CHARSET_PARAM +
charset);
+ return entity;
+ } else {
+ return new StringEntity(s, charset);
+ }
+ }
}