2017-04-12 2 views
0

私はここで困惑しています。私はPNGファイルをRESTサービスにアップロードするテストを開発しており、引き続き406としてNot Acceptableを返すようになっています。ここで PNGファイルをアップロードすると状態406になります。

Apr 12, 2017 12:20:17 PM com.sun.jersey.api.client.filter.LoggingFilter log 
INFO: 1 * Client out-bound request 
1 > POST http://localhost:7001/api/1/payments/XT491926022464/attachments 
1 > Accept: application/xml 
1 > Content-Type: multipart/form-data; boundary=---------------------------1492014017228 
1 > Api-Key: 2222 
1 > Authorization: Bearer 1152921504606857464 
-----------------------------1492014017228 
Content-Type: text/plain 
Content-Disposition: form-data; name="requestId" 

1234 
-----------------------------1492014017228 
Content-Type: text/plain 
Content-Disposition: form-data; name="file" 

BankCustomerAttachmentTestImage.PNG 
-----------------------------1492014017228 
Content-Type: text/plain 
Content-Disposition: form-data; name="description" 

TEST 
-----------------------------1492014017228 
Content-Type: application/octet-stream 
Content-Disposition: form-data; filename="junit8251833935221639216.tmp"; name="file" 

... 

が応答である:私はジャージ-バンドルここ1.19.3

を使用しています

が要求され

Apr 12, 2017 12:20:17 PM com.sun.jersey.api.client.filter.LoggingFilter log 
INFO: 1 * Client in-bound response 
1 < 406 
1 < Access-Control-Allow-Headers: Content-Type 
1 < Access-Control-Allow-Origin: * 
1 < Date: Wed, 12 Apr 2017 16:20:17 GMT 
1 < Content-Length: 14 
1 < Access-Control-Allow-Methods: GET, POST, DELETE, PUT 
1 < Content-Type: text/html; charset=UTF-8 
1 < Connection: close 
1 < X-Powered-By: Servlet/3.0 JSP/2.2 
1 < 
Not Acceptable 

そして、ここのコードです...何私は間違っている?

あなたは、クライアントが唯一のアプリケーション/ XMLコンテンツ・タイプを受け入れることを示しているあなたの要求で
DefaultClientConfig config = new DefaultClientConfig(); 
    Client restClient = Client.create(config); 
    restClient.addFilter(new LoggingFilter()); 

    WebResource restWebResource = restClient.resource("http://..."); 
    WebResource.Builder webResourceBuilder = restWebResource.accept(MediaType.APPLICATION_XML); 

webResourceBuilder.type(MediaType.MULTIPART_FORM_DATA); 
webResourceBuilder.header(RESTActor.HEADER_API_KEY, "1234"); 
webResourceBuilder.header(HttpHeaders.AUTHORIZATION, "Bearer " + "1152921504606857464"); 

FileDataBodyPart fileDataBodyPart = new FileDataBodyPart("file", fileObject, MediaType.APPLICATION_OCTET_STREAM_TYPE); 

    fileDataBodyPart.setContentDisposition(
    FormDataContentDisposition.name("file").fileName(fileObject.getName()).build()); 

    FormDataMultiPart multiPartForm = new FormDataMultiPart(); 
    multiPartForm.field("requestId", "1234"); 
    multiPartForm.field("file", "BankCustomerAttachmentTestImage.PNG"); 
    multiPartForm.field("description", "TEST"); 

    multiPartForm.bodyPart(fileDataBodyPart); 
    multiPartForm.setMediaType(MULTIPART_FORM_DATA_TYPE); 

    final String boundary = "---------------------------" + System.currentTimeMillis(); 

    ClientResponse currentRestClientResponse = 
webResourceBuilder.type(MediaType.MULTIPART_FORM_DATA + "; boundary=" + boundary).post(ClientResponse.class, multiPartForm); 
+1

サーバーはXMLを返すとしていますか?私はそれが戻り値の型 –

答えて

1

1 > Accept: application/xml 

しかし、サーバーは、それがどのような406の許容できないエラー手段だ、このコンテンツタイプを返すことができません。 あなたのクライアントがある、サーバによって返すコンテンツタイプを受け入れる必要があります。

1 < Content-Type: text/html; charset=UTF-8 

そのためには、MediaType.TEXT_HTMLに次の行でのMediaTypeを変更:

WebResource.Builder webResourceBuilder = restWebResource.accept(MediaType.TEXT_HTML); 

次にチェック実際のサーバーの応答。サーバー側に別の問題があることが判明する可能性があります。それはHTTP 500ステータスコードで応答し、解決したら、受け入れられたメディアタイプを特定のものに調整する必要があります。

+0

おかげで、私は次のように働いていた答え – Gaspar

+0

ためAPPLICATION_JSONを使用して動作するようになった – Alexey

+0

を更新しました: WebResource.Builder webResourceBuilder = restWebResource.accept(MediaType.APPLICATION_JSON)。使用 WebResource.Builder webResourceBuilder = restWebResource.accept(MediaType.TEXT_HTML)。 406 – Gaspar

関連する問題