4

このように構造化されたコードを実行しようとすると、406HTTP応答を受信し続けます。コードと入力を何度も再構築しようとしましたが、それでもこのエラーが発生し、何をデバッグすればよいのかさえわからなくなってしまいました。例外は、post()メソッドが@FormParam目的の形式でsを提供していないことを示しているようですが、ご覧のとおり、.accept(MediaType.APPLICATION_FORM_URLENCODED)@Consumes(MediaType.APPLICATION_FORM_URLENCODED)は実際に一致しています。

FirefoxアドオンHTTPRequesterを使用して@FormParamsを渡し、適切なContent-Type(application/x-www-form-urlencoded)で確実に渡します。チェックするものが足りなくなった。誰かアイデアはありますか?


プロキシサービス

Client client = Client.create();
WebResource service = client.resource(myURL);

Form form = new Form();
form.add("value1", value1);
form.add("value2", value2);
form.add("valueN", valueN);

String returnValue = service.accept(MediaType.APPLICATION_FORM_URLENCODED).post(String.class, form);

実際のサービス

@POST
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/theService")
public String theService(
        @FormParam("value1") String value1,
        @FormParam("value2") String value2,
        @FormParam("valueN") String valueN) {

    String returnValue = null;

    /*
     * Do Stuff
     */

    return returnValue;
}

例外

com.sun.jersey.api.client.UniformInterfaceException: POST http://theURL/theService returned a response status of 406
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:563)
at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:69)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:499)
4

1 に答える 1

9

UniformInterfaceExceptionは、名前が不適切なキャッチオール例外です(エラーに関係なく、統一されたインターフェイスを提供する例外であるため、この名前が付けられています)。これは基本的に、ジャージーのあらゆるものによってスローされるIOExceptionです。実際のエラーは406Unacceptableです:

要求されたリソースは、要求で送信されたAcceptヘッダーに従って受け入れられないコンテンツを生成することしかできません。

ここであなたはあなたが受け入れると言っていますMediaType.APPLICATION_FORM_URLENCODED

String returnValue = service.accept(MediaType.APPLICATION_FORM_URLENCODED).post(String.class, form);

しかし、あなたのサービスは以下を生み出しますMediaType.APPLICATION_XML

@Produces(MediaType.APPLICATION_XML)

サーバーは、クライアントが受け入れると言っているコンテンツを生成できないため、406エラーを返します。

ほとんどの場合、あなたは設定することを意味しているのであってWebResource.type、ではありませんaccept

String returnValue = service.type(MediaType.APPLICATION_FORM_URLENCODED).post(String.class, form);
于 2012-09-19T20:43:19.753 に答える