Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在JBoss上的Resteasy客户端上设置超时_Java_Rest_Jakarta Ee_Resteasy_Jboss6.x - Fatal编程技术网

Java 无法在JBoss上的Resteasy客户端上设置超时

Java 无法在JBoss上的Resteasy客户端上设置超时,java,rest,jakarta-ee,resteasy,jboss6.x,Java,Rest,Jakarta Ee,Resteasy,Jboss6.x,我正在尝试在jbosseap服务器上创建一个rest客户机,我需要确保如果连接卡住,超时将结束连接 我的代码如下所示: int timeout = 5000; RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).setConnectTimeout(timeout).build(); HttpClientB

我正在尝试在
jbosseap
服务器上创建一个rest客户机,我需要确保如果连接卡住,超时将结束连接

我的代码如下所示:

int timeout = 5000;
RequestConfig defaultRequestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeout).setSocketTimeout(timeout).setConnectTimeout(timeout).build();
HttpClientBuilder builder = HttpClientBuilder.create();
HttpClient httpClient = builder.setDefaultRequestConfig(defaultRequestConfig).build();
// Previous try
// HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig).build();

ClientExecutor executor = new ApacheHttpClient4Executor(httpClient);        

ClientRequest cr = new ClientRequest("http://www.someserviceurl.com/", executor);
JSONObject jData = new JSONObject();

jData.put("param1", param1);
jData.put("param2", param2);

cr.accept("application/json");
cr.body("application/json", jData.toString());

ClientResponse<String> cres = cr.post(String.class);
int超时=5000;
RequestConfig defaultRequestConfig=RequestConfig.custom().setConnectionRequestTimeout(超时).setSocketTimeout(超时).setConnectTimeout(超时).build();
HttpClientBuilder=HttpClientBuilder.create();
HttpClient HttpClient=builder.setDefaultRequestConfig(defaultRequestConfig.build();
//前科
//HttpClients.custom().setDefaultRequestConfig(defaultRequestConfig.build();
ClientExecutor executor=新ApacheHttpClient4Executor(httpClient);
ClientRequest cr=新ClientRequest(“http://www.someserviceurl.com/“,遗嘱执行人);
JSONObject jData=新的JSONObject();
jData.put(“param1”,param1);
jData.put(“param2”,param2);
cr.accept(“应用程序/json”);
cr.body(“application/json”,jData.toString());
ClientResponse cres=cr.post(String.class);

目前,这段代码没有超时,只是永远卡住了。我做错了什么?

显然这是
RestEasy
的一个已知问题,该问题已在
3.0.9.Final版本上修复

您可以看到错误报告

要修复它,请升级
RestEasy
或使用不推荐使用的
DefaultHttpClient

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, timeout);
HttpConnectionParams.setSoTimeout(params, timeout);
ClientExecutor executor = new ApacheHttpClient4Executor(httpClient);

ClientRequest cr = new ClientRequest("http://www.someserviceurl.com/", executor);

Jboss支持部门的正式答案是使用配置生成器并应用它,在类ApacheHttpClient4Executor中实现loadHttpMethod方法。下面是一个具有一些配置的客户机示例:

import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.jboss.resteasy.client.ClientRequest;
import org.jboss.resteasy.client.ProxyFactory;
import org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor;

// ......

RequestConfig.Builder requestBuilder = RequestConfig.custom();
requestBuilder.setConnectTimeout(100);
requestBuilder.setSocketTimeout(100);
requestBuilder.setConnectionRequestTimeout(100);
final RequestConfig config = requestBuilder.build();

HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
httpClientBuilder.setDefaultRequestConfig(config);

CloseableHttpClient client = httpClientBuilder.build();

ApacheHttpClient4Executor executor = new ApacheHttpClient4Executor(
        client) {
    @Override
    public void loadHttpMethod(ClientRequest request,
            HttpRequestBase httpMethod) throws Exception {
        httpMethod.setConfig(config);
        super.loadHttpMethod(request, httpMethod);
    }
};

// use it in your ClientRequest or Proxy interface
final FooService fooService = ProxyFactory.create(FooService.class, host, executor);

此RESTEasy错误已重新打开,截至2016年5月31日仍未解决。(上面的bug链接仍然有效。)很有趣。你能分享一个链接吗?你原来的链接仍然有效。它显示错误被重新打开。我否决了这个解决方案,因为它使用了不推荐的代码。正确的解决方案是我从Jboss发布的。