java客户端调用webservice 超时问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java客户端调用webservice 超时问题相关的知识,希望对你有一定的参考价值。

在action调用了webservice的一个接口,希望能超过20秒,我们就在页面上提示接口返回超时,但在20秒内只要接口有返回,接口马上停止等待向下执行,请问这要怎么写代码才好呢?客户端代码如下:String address = "http://localhost:8080/axis2spring/services/WeatherService";  EndpointReference target = new EndpointReference(address);    RPCServiceClient serviceClient = new RPCServiceClient();  Options options = serviceClient.getOptions();  options.setTo(target);    QName opGetWeather = new QName("http://service","getWeather");    Object[] opGetWeatherArgs = new Object[];  Class[] returnType = new Class[]Weather.class;  Object[] response = serviceClient.invokeBlocking(opGetWeather, opGetWeatherArgs, returnType);  Weather ret = (Weather) response[0];  if(ret == null)   System.out.println(" has no record");  else    System.out.println("Temperature: " + ret.getTemperature());    (答案有帮助的话,再加分)

参考技术A 用多线程来处理类似问题
将调用这个WebService的程序放到一个独立线程A中,再创建另一个线程B用来计时,线程A和线程B共享一个变量responseOK。

在线程A中调用WebService之前启动线程B,成功返回后设定responseOK=true。
线程B启动后计时,如果responseOK==true则停止计时,如果计时超过20秒,则终止线程A并返回错误信息。

似乎webService调用的时候如果服务端超时应该会有异常触发的,截获此异常即可。

webservice超时设置

参考技术A package com.primeton.mq.test;

importcom.primeton.mq.service.DemoService;

importorg.apache.cxf.endpoint.Client;

importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean;

importorg.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

importorg.apache.cxf.transport.http.HTTPConduit;

importorg.apache.cxf.transports.http.configuration.HTTPClientPolicy;

publicclassdemo

publicstaticvoid main(String[] args)

//创建动态客户端

JaxWsDynamicClientFactoryfactory =JaxWsDynamicClientFactory.newInstance();

Clientclient = factory.createClient("http://localhost:8090/demo/api?wsdl");

// 需要密码的情况需要加上用户名和密码

//client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));

HTTPConduitconduit = (HTTPConduit) client.getConduit();

HTTPClientPolicyhttpClientPolicy = newHTTPClientPolicy();

httpClientPolicy.setConnectionTimeout(2000);//连接超时

httpClientPolicy.setAllowChunking(false);//取消块编码

httpClientPolicy.setReceiveTimeout(120000);//响应超时

        conduit.setClient(httpClientPolicy);

//client.getOutInterceptors().addAll(interceptors);//设置拦截器

try

Object[] objects = newObject[0];

// invoke("方法名",参数1,参数2,参数3....);

objects = client.invoke("sayHello","sujin");

System.out.println("返回数据:"+ objects[0]);

catch(Exceptione)

          e.printStackTrace();

     

以上是关于java客户端调用webservice 超时问题的主要内容,如果未能解决你的问题,请参考以下文章

java axis2 调用webservice 怎么捕获超时异常(即超时了让它停下来,不要报错)

c# 的web Service的超时时间设置问题

接口超时需要怎么处理

webservice返回数据量太大,导致超时怎么办?

axis2 调用 webService 报超时错误 org.apache.axis2.AxisFault: Connection reset

关于webservice的同时调用的问题?