2017-08-04 80 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; 
    } 
}