it-swarm.com.de

Die Ausnahme "Bereits verbunden" versucht, eine POST Anfrage über die Jersey Client API zu stellen

Ich erstelle Integrationstests für einen JAX-RS/Jersey-Webservice, der mit Arquillian auf Tomcat 8 bereitgestellt wird.

Ich versuche eine POST Anfrage wie folgt zu machen:

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));

Wenn ich das mache bekomme ich diese Ausnahme:

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

Ich könnte eine Heuristik verwenden, da ich lerne immer noch Arquillian und Jersey Client API :) Vielen Dank

17

Es kann sein, dass Java.lang.IllegalStateException: Already connected maskiert nur den SSLHandshakeException. Bitte werfen Sie einen Blick auf das Problem # 30 (früher bekannt als JERSEY-2728 Bug).

25
G. Demecki

Dies könnte an einem Netzwerkverbindungsproblem liegen. Ich bin auf dieses Problem gestoßen, da mein VPN die Verbindung verloren hat. Ausnahmen mit "Already connected "Beim Serialisieren des Mail-Texts durch Jackson gemeldet. (Ich habe den Quellcode von Jersey und jackson-jaxrs-base zum Debuggen importiert.) Nachdem ich den Mail-Text entfernt habe, wird eine neue Ausnahme mit Fehler ausgegeben." Unknown hostname", kam heraus.

Nachdem ich mich in mein VPN eingeloggt habe, funktioniert alles einwandfrei.

Ich bin sehr unglücklich über die Jersey-Client-Ausnahme "Already connected ", was mir nur Verwirrung stiftete.

4
Hao Ma

Möglicherweise legen Sie die Header-Eigenschaft für eine http-Verbindung fest, nachdem Sie connection.connect () aufgerufen haben.

2
Manoj

Wahrscheinlich liegt das Problem in der SSL-Aushandlung. Versuchen Sie, eine "vertrauenswürdige" Client-Initialisierungslogik hinzuzufügen.

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