web-dev-qa-db-ja.com

Jersey Client APIを使用したリクエストPOST要求

Arquillianを使用してTomcat 8にデプロイされたJAX-RS/Jersey Webサービスの統合テストを作成しています。

私はPOSTのようなリクエストをしようとしています:

E dummy = dummyFactory.manufacturePojo(getSubClassType());
dummy.setId(null);

Client client = ClientBuilder.newClient();
WebTarget target = client.target(BASE_URI).path("bandeira");

Response response = target.request(MediaType.APPLICATION_JSON)
            .header(HttpHeaders.AUTHORIZATION, CHAVE_TESTE)
            .header(HttpHeaders.CONTENT_TYPE, "application/json")
            .post(Entity.entity(dummy, MediaType.APPLICATION_JSON));

それを行うと、次の例外が発生します。

Caused by: Java.lang.IllegalStateException: Already connected
at Sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.Java:3000)
at org.glassfish.jersey.client.HttpUrlConnector.setOutboundHeaders(HttpUrlConnector.Java:364)
at org.glassfish.jersey.client.HttpUrlConnector.access$100(HttpUrlConnector.Java:91)
at org.glassfish.jersey.client.HttpUrlConnector$4.getOutputStream(HttpUrlConnector.Java:327)
at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.Java:201)
at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.Java:195)
at org.glassfish.jersey.message.internal.CommittingOutputStream.commit(CommittingOutputStream.Java:263)
at org.glassfish.jersey.message.internal.OutboundMessageContext.commitStream(OutboundMessageContext.Java:816)
at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.Java:546)
at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.Java:331)
at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.Java:243)
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.Java:246)
... 149 more

私はまだarquillianとJerseyクライアントAPIを学んでいます :)

17

Java.lang.IllegalStateException: Already connectedSSLHandshakeExceptionのみをマスクします。問題をご覧ください #30 (以前は JERSEY-2728 バグとして知られていました)。

25
G. Demecki

これは、ネットワーク接続の問題が原因である可能性があります。 VPNが接続を失ったため、この問題に遭遇しました。 「Already connected "は、メール本文のシリアル化中に報告されました。(デバッグのためにJerseyとjackson-jaxrs-baseのソースコードをインポートしました。)メール本文を削除した後、エラー付きの新しい例外" Unknown hostname "、出てきました。

VPNにログインすると、すべてが正常に機能します。

Jerseyクライアントの例外について非常に不満です"Already connected "混乱以外の何ものでもありませんでした。

4
Hao Ma

Connection.connect()を呼び出した後、http接続でヘッダープロパティを設定している可能性があります。

2
Manoj

おそらく問題はSSLネゴシエーションにあります。 「trustall」クライアント初期化ロジックを追加してみてください。

SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, new TrustManager[] { new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}

@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}

@Override
public Java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}

} }, new Java.security.SecureRandom());

Client client = ClientBuilder.newBuilder().sslContext(sslcontext).hostnameVerifier((s1, s2) -> true)
.register(MultiPartFeature.class)
.register(new EncodingFeature("gzip", GZipEncoder.class))
.build();
2
Dremore