[jbossws-commits] JBossWS SVN: r10245 - stack/native/branches/netty/modules/core/src/main/java/org/jboss/ws/core/client.
jbossws-commits at lists.jboss.org
jbossws-commits at lists.jboss.org
Fri Jun 26 12:31:41 EDT 2009
Author: alessio.soldano at jboss.com
Date: 2009-06-26 12:31:41 -0400 (Fri, 26 Jun 2009)
New Revision: 10245
Modified:
stack/native/branches/netty/modules/core/src/main/java/org/jboss/ws/core/client/HTTPRemotingConnection.java
Log:
Chunks handling
Modified: stack/native/branches/netty/modules/core/src/main/java/org/jboss/ws/core/client/HTTPRemotingConnection.java
===================================================================
--- stack/native/branches/netty/modules/core/src/main/java/org/jboss/ws/core/client/HTTPRemotingConnection.java 2009-06-26 15:14:57 UTC (rev 10244)
+++ stack/native/branches/netty/modules/core/src/main/java/org/jboss/ws/core/client/HTTPRemotingConnection.java 2009-06-26 16:31:41 UTC (rev 10245)
@@ -85,6 +85,8 @@
{
// provide logging
private static Logger log = Logger.getLogger(HTTPRemotingConnection.class);
+
+ private static final int DEFAULT_CHUNK_SIZE = 1024;
// private Map<String, Object> clientConfig = new HashMap<String, Object>();
@@ -114,7 +116,7 @@
// }
private boolean closed;
- private Integer chunkedLength;
+ private Integer chunkSize = new Integer(DEFAULT_CHUNK_SIZE);
private static final RMChannel RM_CHANNEL = RMChannel.getInstance();
@@ -133,14 +135,14 @@
this.closed = closed;
}
- public Integer getChunkedLength()
+ public Integer getChunkSize()
{
- return chunkedLength;
+ return chunkSize;
}
- public void setChunkedLength(Integer chunkedLength)
+ public void setChunkSize(Integer chunkSize)
{
- this.chunkedLength = chunkedLength;
+ this.chunkSize = chunkSize;
}
public MessageAbstraction invoke(MessageAbstraction reqMessage, Object endpoint, boolean oneway) throws IOException
@@ -348,19 +350,29 @@
ChannelBuffer content = ChannelBuffers.dynamicBuffer();
OutputStream os = new ChannelBufferOutputStream(content);
getMarshaller().write(reqMessage, os);
- if (request.isChunked())
+
+ int cs = chunkSize;
+ if (cs > 0) //chunked encoding
{
- //TODO!! handle chunks here...
+ request.addHeader(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED);
+ //write headers
channel.write(request);
-
- HttpChunk chunk = new DefaultHttpChunk(content);
- channel.write(chunk);
-
+ //write content chunks
+ int size = content.readableBytes();
+ int cur = 0;
+ while (cur < size)
+ {
+ int to = Math.min(cur + cs, size);
+ HttpChunk chunk = new DefaultHttpChunk(content.slice(cur, to - cur));
+ channel.write(chunk);
+ cur = to;
+ }
+ //write last chunk
channel.write(HttpChunk.LAST_CHUNK);
}
else
{
- request.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(content.writerIndex()));
+ request.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(content.readableBytes()));
request.setContent(content);
channel.write(request);
}
@@ -396,7 +408,7 @@
{
CommonMessageContext msgContext = MessageContextAssociation.peekMessageContext();
//We always use chunked transfer encoding
- int chunkSizeValue = (chunkedLength != null ? chunkedLength : 1024);
+// int chunkSizeValue = (chunkSize != null ? chunkSize : 1024);
// Overwrite, through endpoint config
if (msgContext != null)
{
@@ -405,14 +417,10 @@
String sizeValue = config.getProperty(EndpointProperty.CHUNKED_ENCODING_SIZE);
if (sizeValue != null)
- chunkSizeValue = Integer.valueOf(sizeValue);
+ chunkSize = Integer.valueOf(sizeValue);
if (epMetaData.isFeatureEnabled(FastInfosetFeature.class))
- chunkSizeValue = 0;
+ chunkSize = 0;
}
- if (chunkSizeValue > 0)
- {
- message.addHeader(HttpHeaders.Names.TRANSFER_ENCODING, HttpHeaders.Values.CHUNKED);
- }
}
}
More information about the jbossws-commits
mailing list