You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Andrew <su...@gmail.com> on 2011/07/31 04:04:34 UTC

Premature EOF IOException

I'm getting the following error with my CXF client:

Caused by: java.io.IOException: Premature EOF
at
sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:538)
at
sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:582)
at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:669)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at
sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2672)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
at org.apache.xerces.impl.XMLEntityScanner.skipString(Unknown Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown
Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:211)

This occurs while attempting to unmarshal the JAXB response.  What's strange
is this is only occurring in one environment, which unfortunately is
production.  And it is only occurring with responses around 8K, which
appears to be the threshold where CXF starts chunking the response.

The basic architecture is as follows: The client makes a REST request to
server 1, which makes a similar REST request to server 2.  Then, server 1
hands the Response object from server 2 back to the client, without
unmarshalling/remarshalling.

What I see when analyzing the http traffic is a correct chunked response
from server 2, but the response from server 1 a bit malformed.  It says it's
chunked (in header) but it's not and contains the entire response.

I've attempted to turn off chunking, with the following:

WebClient.getConfig(t).getHttpConduit().getClient().setAllowChunking(false);

but I've learned that pertains only to request chunking -- not where the
problem is.

So, my questions are, is there a method to tell CXF to not chunk the
response?  Or, is there an obvious problem here that can be resolved in
another manner?  I am using CXF 2.2.11 (old I know but stuck on it for
now).  Thanks,

Andrew

Re: Premature EOF IOException

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi

thanks for the confirmation - I'm on holidays for another few days
hence the delays...
I think Dan was also mentioning that the server might be able to
affect this process by setting Content-Length to a specific value
assuming the size of the message is known. I don't recall if it is
supported in 2.2.11, but custom JAX-RS MessageBodyWriters can use
getSize() method to achieve that...

Cheers, Sergey

On Mon, Aug 1, 2011 at 8:28 PM, Andrew <su...@gmail.com> wrote:
> Update: this issue was resolved by setting the connection close header:
>
> WebClient.getConfig(client).getHttpConduit().getClient().setConnection(ConnectionType.CLOSE);
>
> which appears to force HTTP 1.0
>
> On Sat, Jul 30, 2011 at 8:04 PM, Andrew <su...@gmail.com> wrote:
>
>> I'm getting the following error with my CXF client:
>>
>> Caused by: java.io.IOException: Premature EOF
>> at
>> sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:538)
>> at
>> sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:582)
>> at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:669)
>> at java.io.FilterInputStream.read(FilterInputStream.java:116)
>> at
>> sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2672)
>> at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
>> at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
>> at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
>> at java.io.InputStreamReader.read(InputStreamReader.java:167)
>> at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
>> at org.apache.xerces.impl.XMLEntityScanner.skipString(Unknown Source)
>> at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown
>> Source)
>> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
>> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
>> at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>> at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
>> at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
>> at
>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:211)
>>
>> This occurs while attempting to unmarshal the JAXB response.  What's
>> strange is this is only occurring in one environment, which unfortunately is
>> production.  And it is only occurring with responses around 8K, which
>> appears to be the threshold where CXF starts chunking the response.
>>
>> The basic architecture is as follows: The client makes a REST request to
>> server 1, which makes a similar REST request to server 2.  Then, server 1
>> hands the Response object from server 2 back to the client, without
>> unmarshalling/remarshalling.
>>
>> What I see when analyzing the http traffic is a correct chunked response
>> from server 2, but the response from server 1 a bit malformed.  It says it's
>> chunked (in header) but it's not and contains the entire response.
>>
>> I've attempted to turn off chunking, with the following:
>>
>>
>> WebClient.getConfig(t).getHttpConduit().getClient().setAllowChunking(false);
>>
>> but I've learned that pertains only to request chunking -- not where the
>> problem is.
>>
>> So, my questions are, is there a method to tell CXF to not chunk the
>> response?  Or, is there an obvious problem here that can be resolved in
>> another manner?  I am using CXF 2.2.11 (old I know but stuck on it for
>> now).  Thanks,
>>
>> Andrew
>>
>>
>



-- 
Sergey Beryozkin

http://sberyozkin.blogspot.com
Talend - http://www.talend.com

Re: Premature EOF IOException

Posted by Andrew <su...@gmail.com>.
Update: this issue was resolved by setting the connection close header:

WebClient.getConfig(client).getHttpConduit().getClient().setConnection(ConnectionType.CLOSE);

which appears to force HTTP 1.0

On Sat, Jul 30, 2011 at 8:04 PM, Andrew <su...@gmail.com> wrote:

> I'm getting the following error with my CXF client:
>
> Caused by: java.io.IOException: Premature EOF
> at
> sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:538)
> at
> sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:582)
> at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:669)
> at java.io.FilterInputStream.read(FilterInputStream.java:116)
> at
> sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2672)
> at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
> at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
> at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
> at java.io.InputStreamReader.read(InputStreamReader.java:167)
> at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source)
> at org.apache.xerces.impl.XMLEntityScanner.skipString(Unknown Source)
> at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown
> Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
> at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
> at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
> at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
> at
> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:211)
>
> This occurs while attempting to unmarshal the JAXB response.  What's
> strange is this is only occurring in one environment, which unfortunately is
> production.  And it is only occurring with responses around 8K, which
> appears to be the threshold where CXF starts chunking the response.
>
> The basic architecture is as follows: The client makes a REST request to
> server 1, which makes a similar REST request to server 2.  Then, server 1
> hands the Response object from server 2 back to the client, without
> unmarshalling/remarshalling.
>
> What I see when analyzing the http traffic is a correct chunked response
> from server 2, but the response from server 1 a bit malformed.  It says it's
> chunked (in header) but it's not and contains the entire response.
>
> I've attempted to turn off chunking, with the following:
>
>
> WebClient.getConfig(t).getHttpConduit().getClient().setAllowChunking(false);
>
> but I've learned that pertains only to request chunking -- not where the
> problem is.
>
> So, my questions are, is there a method to tell CXF to not chunk the
> response?  Or, is there an obvious problem here that can be resolved in
> another manner?  I am using CXF 2.2.11 (old I know but stuck on it for
> now).  Thanks,
>
> Andrew
>
>