Java 我该如何解决这个问题;溪流已关闭”;使用CXF-RS客户端时出错?

Java 我该如何解决这个问题;溪流已关闭”;使用CXF-RS客户端时出错?,java,rest,cxf,cxfrs,Java,Rest,Cxf,Cxfrs,我正在使用CXF-RS rest客户端将二进制文件发送到服务器,我遇到以下错误: Caused by: java.io.IOException: stream is closed at sun.net.www.http.ChunkedInputStream.ensureOpen(ChunkedInputStream.java:174) at sun.net.www.http.ChunkedInputStream.available(ChunkedInputStream.java:

我正在使用CXF-RS rest客户端将二进制文件发送到服务器,我遇到以下错误:

Caused by: java.io.IOException: stream is closed
    at sun.net.www.http.ChunkedInputStream.ensureOpen(ChunkedInputStream.java:174)
    at sun.net.www.http.ChunkedInputStream.available(ChunkedInputStream.java:718)
    at java.io.FilterInputStream.available(FilterInputStream.java:168)
    at org.apache.cxf.helpers.IOUtils.toString(IOUtils.java:213)
    at org.apache.cxf.helpers.IOUtils.toString(IOUtils.java:203)
    at org.apache.cxf.jaxrs.provider.PrimitiveTextProvider.readFrom(PrimitiveTextProvider.java:51)
    at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBodyReader(JAXRSUtils.java:1280)
    at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:323)
我认为客户端记录器正在记录/关闭二进制流,然后服务器在尝试读取二进制流时给了我这个错误

以下是我的客户端代码:

        List<Object> providers = new ArrayList<>();
        providers.add(new JacksonJaxbJsonProvider());

        WebClient client = WebClient.create("http://localhost:8080/images", providers).accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON);
        ClientConfiguration config = WebClient.getConfig(client);

        config.getInInterceptors().add(new LoggingInInterceptor());
        config.getOutInterceptors().add(new LoggingOutInterceptor());
        String response = handleErrors("", client.type(MediaType.APPLICATION_OCTET_STREAM_TYPE).post(imageData));
List providers=new ArrayList();
add(新的JacksonJaxbJsonProvider());
WebClient客户端=WebClient.create(“http://localhost:8080/images接受(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON);
ClientConfiguration=WebClient.getConfig(客户端);
config.getInInterceptors().add(新的logginInterceptor());
config.getOutiterCeptors().add(新的LoggingOutiterCeptor());
String response=handleErrors(“,client.type(MediaType.APPLICATION_OCTET_STREAM_type).post(imageData));
我在谷歌上搜索了这个错误,发现这篇文章解释了如何解决这个问题:

我所要做的就是删除客户端日志记录的行,如下所示:

        List<Object> providers = new ArrayList<>();
        providers.add(new JacksonJaxbJsonProvider());

        WebClient client = WebClient.create("http://localhost:8080/images", providers).accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON);
        ClientConfiguration config = WebClient.getConfig(client);

        //config.getInInterceptors().add(new LoggingInInterceptor());
        //config.getOutInterceptors().add(new LoggingOutInterceptor());
        String response = handleErrors("", client.type(MediaType.APPLICATION_OCTET_STREAM_TYPE).post(imageData));
List providers=new ArrayList();
add(新的JacksonJaxbJsonProvider());
WebClient客户端=WebClient.create(“http://localhost:8080/images接受(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON);
ClientConfiguration=WebClient.getConfig(客户端);
//config.getInInterceptors().add(新的logginInterceptor());
//config.getOutiterCeptors().add(新的LoggingOutiterCeptor());
String response=handleErrors(“,client.type(MediaType.APPLICATION_OCTET_STREAM_type).post(imageData));
显然,我不想关闭日志记录,因为它是调试问题的关键。还有别的办法吗?我在上面给出的链接是:

我相信阿莱西奥或丹在2.4.1-1中修正了回归

但我不确定这意味着什么。我正在使用此依赖项:

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-client</artifactId>
        <version>3.0.4</version>
    </dependency>

org.apache.cxf
cxf rt rs客户端
3.0.4
看来我已经过了那个版本了。这就是说,我的测试与我的服务器(也是CXF)在同一个类路径中,所以可能是先加载rest客户机的2.4.1.-快照之前的版本?我打印了我的
effective:pom
,对cxf rt rs客户端的唯一依赖是3.0.4版