1

マルチパートリクエストでサーバにヒットするジャージクライアントを作成しようとしています。
java.io.ByteArrayOutputStreamタイプのストリームとしてアップロードするファイルがあります。
私は、エラーを検索しthis question here渡って来て、このanswer here
とが、効果なしに、Clientを作成中 register(MultiPartFeature.class)を追加しました。
私はたぶん正しい方向に微調整が必​​要です。ありがとう!

私はMavenなどを使用していません。私javaファイルから

関連する部分は次のとおりです。web.xmlからメディアタイプ "multipart/form-data"に利用可能なMessageBodyWriterがありません

FormDataMultiPart multiPart = new FormDataMultiPart(); 
FormDataContentDisposition.FormDataContentDispositionBuilder dispositionBuilder = FormDataContentDisposition 
.name("file"); 

dispositionBuilder.fileName("file.zip"); 
FormDataContentDisposition formDataContentDisposition = dispositionBuilder.build(); 

/* 
* byteArrayOutputStream is of type java.io.ByteArrayOutputStream 
* and contains the file I wish to upload. 
*/ 
multiPart.bodyPart(
new FormDataBodyPart("file", byteArrayOutputStream, MediaType.APPLICATION_OCTET_STREAM_TYPE) 
.contentDisposition(formDataContentDisposition)); 

Entity <FormDataMultiPart> entity = Entity.entity(multiPart, MediaType.MULTIPART_FORM_DATA_TYPE); 

Client client = ClientBuilder.newClient(new ClientConfig().register(MultiPartFeature.class)); 
WebTarget webTarget = client.target("http://localhost:3000/path/to/service"); 

// send request 

Invocation.Builder invocationBuilder = webTarget.request(); 
Response response = invocationBuilder.post(entity); 
return response; 

関連する部分は次のとおりです。

  <servlet> 
       <servlet-name>Jersey Web Application</servlet-name> 
       <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
       <init-param> 
        <param-name>jersey.config.server.provider.packages</param-name> 
        <param-value>com.example</param-value> 
       </init-param> 
       <init-param> 
        <param-name>jersey.config.server.provider.classnames</param-name> 
        <param-value>org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature</param-value> 
       </init-param> 
       <load-on-startup>1</load-on-startup> 
     </servlet> 

のApache Tomcat 8.5ランタイム上のEclipse内でそれを実行しようとしているときに、私はこの次のエラーを取得しますサーバ。

SEVERE: Servlet.service() for servlet [Jersey Web Application] in context with path [/TestRest] threw exception [javax.ws.rs.ProcessingException: No available MessageBodyWriter for class "class java.io.ByteArrayOutputStream" and media type "multipart/form-data".] with root cause 
java.lang.IllegalArgumentException: No available MessageBodyWriter for class "class java.io.ByteArrayOutputStream" and media type "multipart/form-data". 
    at org.glassfish.jersey.media.multipart.internal.MultiPartWriter.writeTo(MultiPartWriter.java:229) 
    at org.glassfish.jersey.media.multipart.internal.MultiPartWriter.writeTo(MultiPartWriter.java:79) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) 
    at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) 
    at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1130) 
+0

OutputStreamではなくInputStream(またはbyte [])を使用する必要があると思います。あなたもメモリを使い果たしていないので、InputStreamを使うかもしれません。 –

+0

@peeskillet InputStream(ByteArrayInputStream)を利用するコードを変換するのが私の仕事です!それを答えとして追加してもらえますか?乾杯! – Ozil

答えて

1

OutputStreamを扱う何MessageBodyWriterはありません。 InputStreamを代わりに使用

関連する問題