CXF-RS レスト クライアントを使用してバイナリ ファイルをサーバーに送信していますが、次のエラーが発生します。
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));
このエラーをグーグルで検索したところ、問題の修正方法を説明している次の記事が見つかりました: http://cxf.547215.n5.nabble.com/quot-Stream-is-closed-quot-Exception-when-upgrade-from-CXF- 2-3-3-to-CXF-2-4-0-td4385277.html
これを修正するために私がしなければならないのは、次のようにクライアント側のログ用にこれらの行を削除することだけです:
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));
明らかに、問題をデバッグするための鍵であるため、ロギングをオフにしたくありません。これを回避する他の方法はありますか?上記のリンクには次のように書かれています。
Alessio または Dan が 2.4.1-SNAPSHOT でリグレッションを修正したと思います
しかし、これが何を意味するのかわかりません。私はこの依存関係を使用しています:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-client</artifactId>
<version>3.0.4</version>
</dependency>
私はそのバージョンをはるかに超えているようです。そうは言っても、私のテストは私のサーバーと同じクラスパスにあり、これは CXF でもあるので、残りのクライアントの 2.4.1.-SNAPSHOT より前のバージョンが最初にロードされているのではないでしょうか? effective:pom
cxf-rt-rs-client への唯一の依存関係はバージョン 3.0.4 です。