2

I'm using Jersey 2.16 client for fetching files, some of the files are coming out empty when I try to parse the response.

For example, while trying to fetch URL:

https://s1.yimg.com/uu/api/res/1.2/3LJG5Qp6cO9WVZ644ybK1A--/YXBwaWQ9eXRhY2h5b247aD0xNjQ7dz0yOTA7/https://ibdp.videovore.com/video/61260788?size=512x288

The response status is 200, I see the content-length header stating there should be 9081 bytes, but the very first call to inputStream.read returns -1.

Following is the code that downloads the data:

private ByteArrayOutputStream downloadFile(Response response) {
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(1024);
    try {
        InputStream inputStream = response.readEntity(InputStream.class);
        byte[] bytes = new byte[1024];

        int readBytes = inputStream.read(bytes); // for the given URL this returns -1

        while (readBytes > 0) {
            outputStream.write(bytes, 0, readBytes);
            readBytes = inputStream.read(bytes);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return outputStream;
}

The response headers I get:

Server=ATS
Public-Key-Pins-Report-Only=max-age=2592000; pin-sha256="2fRAUXyxl4A1/XHrKNBmc8bTkzA7y4FB/GLJuNAzCqY="; pin-sha256="I/Lt/z7ekCWanjD0Cvj5EqXls2lOaThEA0H2Bg4BT/o="; pin-sha256="Wd8xe/qfTwq3ylFNd3IpaqLHZbh2ZNCLluVzmeNkcpw="; pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="i7WTqTvh0OioIruIfFR4kMPnBqrS2rdiVPl/s2uC/CY="; pin-sha256="r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E="; pin-sha256="uUwZgwDOxcBXrQcntwu+kYFpkiVkOaezL0WYEZ3anJc="; pin-sha256="dolnbtzEBnELx/9lOEQ22e6OZO/QNb6VSSX2XHA3E7A="; includeSubdomains; report-uri="http://csp.yahoo.com/beacon/csp?src=yahoocom-hpkp-report-only"
Last-Modified=Sun, 30 Dec 2018 19:10:17 GMT
P3P=policyref="https://policies.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV"
Referrer-Policy=no-referrer-when-downgrade
Strict-Transport-Security=max-age=15552000
X-Server-Processor=ymagine
X-XSS-Protection=1; mode=block
Content-Length=9081
Age=11549
Content-Type=image/jpeg
X-Content-Type-Options=nosniff
Connection=keep-alive
X-Server-Time-FetchImage=89603
X-Server-Time-Process=3800
Date=Mon, 07 Jan 2019 08:36:25 GMT
Via=http/1.1 e30.ycpi.lob.yahoo.com (ApacheTrafficServer [cRs f ])
Cache-Control=public, max-age=86400
ETag="5c291819-6ec1"
Content-Disposition=inline; filename=61260788?size=512x288.jpg
X-Image-Height=163
X-Image-Width=290
X-Server-Time-Total=93975
Expect-CT=max-age=31536000, report-uri="http://csp.yahoo.com/beacon/csp?src=yahoocom-expect-ct-report-only"
  • Add finally block and close your all streams in it ( after reading it ). I'm not sure whether it'll solve your problem but it's standard practice, if you don't close streams then you might will face memory full issue with your application. – Mayur Jan 07 '19 at 12:24
  • Unfortunately, this is not the issue, Jersey implements an UncloseableInputStream so the problem still stands. – Michael Yosher Jan 13 '19 at 12:19

0 Answers0