Thanks olegk, Based on your input and help I created below classes and
started to test it out.
Now I am able to control the size of the chunk and disable caching with 0
size.
How do I use these classes with connection pooling classes.
I am only able to use with HttpRequestExecutor as shown below code, I need
help to know if it can be coded differently or you can point me to the right
examples which use HttpClientConnection class.
InputStream is = (InputStream) request.getInputStream();
BasicHttpParams bhttp_params = new BasicHttpParams();
HttpRequestExecutor httpexecutor = new HttpRequestExecutor();
HttpContext context = new BasicHttpContext(null);
HttpHost host = new HttpHost("abcd.efgh.ijk.net",80);
MyHttpClientConnection conn = new
MyHttpClientConnection();
conn.setChunkSize(0);
BasicHttpProcessor httpproc = new BasicHttpProcessor();
context.setAttribute(ExecutionContext.HTTP_CONNECTION,
conn);
context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, host);
httpproc.addInterceptor(new RequestContent());
httpproc.addInterceptor(new RequestTargetHost());
httpproc.addInterceptor(new RequestConnControl());
httpproc.addInterceptor(new RequestUserAgent());
if (!conn.isOpen())
{
Socket socket;
try {
socket = new Socket(host.getHostName(),
host.getPort());
conn.bind(socket,bhttp_params);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
BasicHttpEntityEnclosingRequest bhttp_req = new
BasicHttpEntityEnclosingRequest("POST","/localbusinesssearch/rsa");
InputStreamEntity is_entity = new
InputStreamEntity(is, -1);
is_entity.setContentType("application/octet-stream");
is_entity.setChunked(true);
bhttp_req.setEntity(is_entity);
try {
httpexecutor.preProcess(bhttp_req,
httpproc, context);
HttpResponse http_resp =
httpexecutor.execute(bhttp_req, conn,
context);
http_resp.setParams(bhttp_params);
httpexecutor.postProcess(http_resp,
httpproc, context);
System.out.println("<< Response: "
+ http_resp.getStatusLine());
System.out.println("<< Response: " +
Arrays.toString(http_resp.getAllHeaders()));
System.out.println(EntityUtils.toString(http_resp.getEntity()));
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
public class MyHttpClientConnection extends DefaultHttpClientConnection
{
MyEntitySerializer myEntitySerializer;
public MyHttpClientConnection()
{
super();
myEntitySerializer.setChunkSize(0);
}
public void setChunkSize(int size)
{
myEntitySerializer.setChunkSize(size);
}
@Override
protected EntitySerializer createEntitySerializer() {
System.out.println("create my entity serializer");
myEntitySerializer = new MyEntitySerializer(new
StrictContentLengthStrategy());
return myEntitySerializer;
}
}
public class MyEntitySerializer extends EntitySerializer {
private ContentLengthStrategy lenStrategy;
private int chunkSize;
private int count = 0;
public MyEntitySerializer(ContentLengthStrategy lenStrategy) {
super(lenStrategy);
this.lenStrategy = lenStrategy;
}
@Override
protected OutputStream doSerialize(
SessionOutputBuffer outbuffer,
HttpMessage message) throws HttpException, IOException
{
long len = this.lenStrategy.determineLength(message);
if (len == ContentLengthStrategy.CHUNKED) {
// use largish buffer for output chunks
return new ChunkedOutputStream(outbuffer,chunkSize);
} else if (len == ContentLengthStrategy.IDENTITY) {
return new IdentityOutputStream(outbuffer);
} else {
return new ContentLengthOutputStream(outbuffer, len);
}
}
public void setChunkSize(int size)
{
this.chunkSize = size;
}
}
olegk wrote:
>
> On Fri, 2012-05-25 at 09:28 -0700, anr wrote:
>> scenario is end user speaking in the mobile device the audio stream
>> should be
>> flushed to the speech engine to process as it comes.
>> Can you help me out by pointing to the examples how to achieve the steps
>> you
>> have mentioned.
>>
>> Thanks for all the help.
>
> static class MyEntitySerializer extends EntitySerializer {
>
> private ContentLengthStrategy lenStrategy;
>
> public MyEntitySerializer(ContentLengthStrategy lenStrategy) {
> super(lenStrategy);
> this.lenStrategy = lenStrategy;
> }
>
> @Override
> protected OutputStream doSerialize(
> SessionOutputBuffer outbuffer,
> HttpMessage message) throws HttpException, IOException {
> long len = this.lenStrategy.determineLength(message);
> if (len == ContentLengthStrategy.CHUNKED) {
> // use largish buffer for output chunks
> return new ChunkedOutputStream(outbuffer, 10240);
> } else if (len == ContentLengthStrategy.IDENTITY) {
> return new IdentityOutputStream(outbuffer);
> } else {
> return new ContentLengthOutputStream(outbuffer, len);
> }
> }
>
> }
>
> static class MyHttpClientConnection extends DefaultHttpClientConnection
> {
>
> public MyHttpClientConnection() {
> super();
> }
>
> @Override
> protected EntitySerializer createEntitySerializer() {
> return new MyEntitySerializer(new
> StrictContentLengthStrategy());
> }
>
> }
>
> Hope this helps
>
> Oleg
>
>>
>>
>>
>> olegk wrote:
>> >
>> > On Thu, 2012-05-24 at 15:13 -0700, anr wrote:
>> >>
>> >> DEBUG org.apache.http.wire - >> "800[\r][\n]"
>> >> org.apache.http.wire - >> "800[\r][\n]"
>> >>
>> >> CoreConnectionPNames.SOCKET_BUFFER_SIZE
>> >> CoreConnectionPNames.MIN_CHUNK_LIMIT
>> >>
>> >> How to change the transfer encoding chunk size when request is posted.
>> I
>> >> want to set different chunk sizes when we post a request.
>> >>
>> >> Thanks
>> >
>> > Per default HttpClient use 2048 byte cache for chunk coded output. So,
>> > the chunks should be about 2048 bytes, unless one explicitly uses
>> #flush
>> > method to flush out smaller chunks.
>> >
>> > There is currently no (easy) way of overriding the default size of the
>> > chunk cache without creating a custom entity serializer and custom HTTP
>> > connection class.
>> >
>> > Oleg
>> >
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: [email protected]
>> > For additional commands, e-mail: [email protected]
>> >
>> >
>> >
>>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
>
--
View this message in context:
http://old.nabble.com/POST-Request-How-to-enable-Chunk-Size-tp33904874p33939535.html
Sent from the HttpClient-User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]