从webservice响应中读取InputStream

时间:2015-09-01 07:49:59

标签: java web-services stream inputstream

我想要做的似乎是一件非常简单的事情,从一个来自一个RestResponse类返回的Jersey webservice获取一个InputStream。但我没有得到我的客户端的流:

public class RestResponse {
    private InputStream responseStream;

    public RestResponse(InputStream responseBodyStream) throws IOException{     
        this.responseStream = responseBodyStream;   
        //here I can get the stream contents from this.responseStream
    }

    public InputStream getResponseStream() throws IOException { 
        //here stream content is empty, if called from outside
        //only contains content, if called from constructor
        return this.responseStream;
    }
}

public class HttpURLConnectionClient{

    public RestResponse call(){
        try{
            ....

            InputStream in = httpURLConnection.getInputStream();
            RestResponse rr = new RestResponse(in); 
        }finally{
           in.close(); <- this should be the suspect
        }
    }
}


    RestResponse rr = httpURLConnectionClient.call()//call to some url
    rr.getResponseStream(); //-> stream content is empty

任何想法,我错过了什么?是不是只能管道流?

1 个答案:

答案 0 :(得分:1)

某些类型的bar.json只能在Java中读取一次。根据您上面的评论,当您将InputStream传输到InputStream时,您似乎正在使用System.out。尝试将通话发送至System.out,看看您是否可以访问InputStream。还要确保在您需要的地方之前,代码中的任何其他位置都没有使用该流。

<强>更新

您的实际问题似乎是在您有机会使用它之前关闭InputStream。因此解决方案是在您需要之前保持流打开,然后关闭它。

通常情况下,打开流并使其长时间保持打开并不是一个好的设计实践,因为那时底层资源不会被其他需要它的人使用。因此,您应该打开流,并在实际需要时使用它。