2017-08-04 85 views
0

我正在嘗試從代碼執行PUT請求調用。我已經使用WebResource類的物體,像下面:com.sun.jersey.api.client.ClientHandlerException:java.net.SocketException:連接重置

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

這裏所有的變量connectionTimeout,readTimeout,apiUsername,apiPassword,API_URL有正確的價值觀。

從最後一行是trowing一個SocketException爲 com.sun.jersey.api.client.ClientHandlerException:java.net.SocketException異常:連接復位 唯一的例外是ClientHandlerException catch塊中捕獲。

但是,當我試圖用Postman Rest Client的其他輸入命中API_URL時,我正在創建成功響應。

任何人都可以請幫助我理解爲什麼它不是從代碼工作?

+0

你有沒有得到任何解決方案呢?我注意到自從你問了很久以後,實際上我面臨着同樣的問題。 – prnjn

回答

0

使用JRE 7作爲運行時環境。然後像下面一樣創建你的客戶端並使用。它會解決你的問題。

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