2017-08-04 4 views
0

Ich versuche, eine PUT-Anfrage von Code zu tun. Ich habe wie unter WebResource Class-Objekt verwendet:com.sun.jersey.api.client.ClientHandlerException: java.net.SocketException: Verbindung zurückgesetzt

final Client client = Client.create(); 
final WebResource webResource = client.resource(API_URL); 
client.setConnectTimeout(Integer.valueOf(connectionTimeout)); 
client.setReadTimeout(Integer.valueOf(readTimeout)); 
client.addFilter(new HTTPBasicAuthFilter(apiUsername, apiPassword)); 
webResource.type(MediaType.APPLICATION_JSON); 
webResource.accept(MediaType.APPLICATION_JSON); 
webResource.header("Content-Length", 
String.valueOf(jsonInString.getBytes(Charset.forName("UTF-8")).length)); 
final ClientResponse response = webResource.put(ClientResponse.class, 
jsonInString); 

hier alle Variablen connection, Readtimeout, apiUsername, apiPassword, API_URL richtigen Werte hat.

Von der letzten Zeile wird eine Socket als com.sun.jersey.api.client.ClientHandlerException trowing: java.net.SocketException: Anschluss zurück die Ausnahme innerhalb ClientHandlerException catch-Block abgefangen wird.

Aber wenn ich versuche, die API_URL mit anderen Eingaben von Postman Rest Client zu schlagen, werde ich Erfolg Antwort geben.

Kann mir bitte jemand helfen, zu verstehen, warum es nicht von Code funktioniert?

+0

Haben Sie eine Lösung dafür? Ich merke, es ist lange her, seit du gefragt hast, und tatsächlich stehe ich vor demselben Problem. – prnjn

Antwort

0

Verwenden Sie JRE 7 als Laufzeitumgebung. Und erstellen Sie Ihren Client wie folgt und verwenden Sie. Es wird dein Problem lösen.

package com.myoffice.util; 

import java.security.SecureRandom; 
import javax.net.ssl.HttpsURLConnection; 
import javax.net.ssl.SSLContext; 
import com.sun.jersey.api.client.Client; 
import com.sun.jersey.api.client.config.DefaultClientConfig; 

public class ClientHelper { 

    enter code here 

    private static Client client = null; 

    static{ 
     SSLContext ctx = null; 
     try { 
      //Protocol used is TLSv1.2. You may need other ..check target URL required Protocol 
      ctx = SSLContext.getInstance("TLSv1.2")); 
      ctx.init(null, null, new SecureRandom()); 
      HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory()); 
      client= Client.create(new DefaultClientConfig()); 
     } catch (Exception e) { 
      logger.error("Exception while creating SSLContext", e); 
     } 
    } 

    public static Client getClient(){ 
     return client; 
    } 
} 
Verwandte Themen