0

ノックアップした小さなジャージクライアントテストを介して、リモートマシンで実行しているサービスに接続できません。

次のようにcURLを使用して接続とPOSTを正常に行うことができます。

curl -X POST -T test.txt -H "Content-Type: application/octet-stream" http://remote-machine:11181/data?start=123

私が設定したサービスremote-machineはこれを受け入れて期待どおりに機能しますが、ジャージクライアントの実装でまったく同じURIを処理すると、次の例外が発生します。

com.sun.jersey.api.client.UniformInterfaceException: POST http://remote-machine:11181/data?start=123 returned a response status of 502 Bad Gateway
    at com.sun.jersey.api.client.WebResource.voidHandle(WebResource.java:707)
    at com.sun.jersey.api.client.WebResource.access$400(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:553)

私のジャージークライアントは次のとおりです。

public static void main(String[] args) throws IOException {
    if (args.length < 2) {
        System.err.println("Usage: " + TestJerseyClient.class.getName() + " <uri> <input file>");
        System.exit(-1);
    }

    File file = new File(args[1]);
    if (!file.exists()) {
        System.err.println("File not found: " + file.getAbsolutePath());
        System.exit(-2);
    }

    URI uri = URI.create(args[0]);
    Client client = new Client();
    client.setChunkedEncodingSize(16 * 1024);

    FileInputStream stream = new FileInputStream(file);
    try {
        System.out.println("Sending " + file.getPath());
        client.resource(uri).type(MediaType.APPLICATION_OCTET_STREAM).post(stream);
        System.out.println("Done");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        Closeables.closeQuietly(stream);
    }
}

私のジャージクライアントがcURLと同じURIを与えられたときに、これらの502BadGatewayエラーが発生する理由について助けていただければ幸いです。

(おそらくプロキシの問題かもしれないと思いますが、cURLのようにジャージを拾うことに関しては、私にはわかりません。)

4

1 に答える 1

0

ApacheHttpClient標準のJerseyの代わりに使用することでこれを解決することができましたClient。表面下の違いは完全にはわかりませんがApacheHttpClient、標準のJerseyクライアントよりも、どのような構成やプロキシでもうまく機能しているようです。これが、作成された理由の1つである可能性があります。

私が変更しなければならなかったのは:

Client client = new Client();

Client client = new ApacheHttpClient();

もちろん、それに応じて依存関係を更新します。

于 2013-04-01T17:01:48.597 に答える