You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@abdera.apache.org by "James Falkner (JIRA)" <ji...@apache.org> on 2009/10/19 22:22:59 UTC

[jira] Created: (ABDERA-249) Abdera fails to completely read streams using GZIP compression

Abdera fails to completely read streams using GZIP compression
--------------------------------------------------------------

                 Key: ABDERA-249
                 URL: https://issues.apache.org/jira/browse/ABDERA-249
             Project: Abdera
          Issue Type: Bug
    Affects Versions: 1.0
         Environment: Mac OS X, Java 1.6
            Reporter: James Falkner


Test code:

{code:java}
Abdera abdera = new Abdera();
AbderaClient client = new AbderaClient(abdera);
ClientResponse resp = client.get("http://www.facebook.com/activitystreams/feed.php?source_id=499225640");
Document<Feed> doc = resp.getDocument();
doc.complete();
{code}

When reading a stream that is gzip-compressed (such as the sample facebook stream above), Abdera throws an exception:

{code}
Exception in thread "main" org.apache.abdera.parser.ParseException: java.lang.RuntimeException: [was class java.io.EOFException] Unexpected end of ZLIB input stream
	at org.apache.abdera.parser.stax.FOMBuilder.next(FOMBuilder.java:260)
	at org.apache.axiom.om.impl.llom.OMNodeImpl.build(OMNodeImpl.java:318)
	at org.apache.axiom.om.impl.llom.OMElementImpl.build(OMElementImpl.java:614)
	at org.apache.abdera.parser.stax.FOMElement.complete(FOMElement.java:845)
	at org.apache.abdera.parser.stax.FOMFeed.sortEntries(FOMFeed.java:167)
	at FacebookStreamReader.main(FacebookStreamReader.java:42)
Caused by: java.lang.RuntimeException: [was class java.io.EOFException] Unexpected end of ZLIB input stream
	at com.ctc.wstx.util.ExceptionUtil.throwRuntimeException(ExceptionUtil.java:18)
	at com.ctc.wstx.sr.StreamScanner.throwLazyError(StreamScanner.java:706)
	at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3655)
	at com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:809)
	at org.apache.axiom.om.impl.builder.StAXBuilder.createOMText(StAXBuilder.java:245)
	at org.apache.axiom.om.impl.builder.StAXBuilder.createOMText(StAXBuilder.java:216)
	at org.apache.abdera.parser.stax.FOMBuilder.applyTextFilter(FOMBuilder.java:158)
	at org.apache.abdera.parser.stax.FOMBuilder.next(FOMBuilder.java:206)
	... 5 more
Caused by: java.io.EOFException: Unexpected end of ZLIB input stream
	at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:223)
	at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141)
	at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:92)
	at java.io.FilterInputStream.read(FilterInputStream.java:116)
	at org.apache.abdera.protocol.client.util.AutoReleasingInputStream.read(AutoReleasingInputStream.java:56)
	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 com.ctc.wstx.io.MergedReader.read(MergedReader.java:101)
	at com.ctc.wstx.io.ReaderSource.readInto(ReaderSource.java:84)
	at com.ctc.wstx.io.BranchingReaderSource.readInto(BranchingReaderSource.java:57)
	at com.ctc.wstx.sr.StreamScanner.loadMore(StreamScanner.java:967)
	at com.ctc.wstx.sr.BasicStreamReader.readTextSecondary(BasicStreamReader.java:4626)
	at com.ctc.wstx.sr.BasicStreamReader.readCoalescedText(BasicStreamReader.java:4124)
	at com.ctc.wstx.sr.BasicStreamReader.finishToken(BasicStreamReader.java:3699)
	at com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3647)
	... 10 more
{code}

If I force the stream to be un-compressed, via this code, it works:

{code:java}
Abdera abdera = new Abdera();
AbderaClient client = new AbderaClient(abdera);
RequestOptions options = client.getDefaultRequestOptions();
options.setAcceptEncoding((String)null);
ClientResponse resp = client.get("http://www.facebook.com/activitystreams/feed.php?source_id=499225640", options);
Document<Feed> doc = resp.getDocument();
doc.complete();
{code}

There is some code in org.apache.abdera.protocol.client.util.AutoReleasingInputStream that is not properly handling the EOFException.  If I modify that code to also catch the EOFException and behave as though it had gotten back a -1 from the read() method, then it also starts working.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.