本人用cxf做webservice的客户端开发超时设置的问题

一个善良的码农 2018-11-18 03:15:22
@Test
public void cl1(){
String inMsg="<Header>" +
" <SystemType>COMMON</SystemType>" +
" <DataCenterType>HIS</DataCenterType>" +
" <FunctionName>GetOutpatientInfo</FunctionName>" +
" <ReturnType>xml</ReturnType>" +
"</Header>" +
"<Body>" +
" <CardNo>"+"123"+"</CardNo>" +
"</Body>";
try {
//1. 创建服务代理工厂(继承 javax.xml.ws.Service 的类)
System.out.println("===============(1) "+System.currentTimeMillis());
HisDataOut factory =new HisDataOut();
System.out.println("===============(2) "+System.currentTimeMillis());
//2. 创建服务代理
HisDataOutSoap hisDataOutSoap = factory.getHisDataOutSoap();
System.out.println("===============(3) "+System.currentTimeMillis());
//3. 获取Client 对象
Client client = ClientProxy.getClient(hisDataOutSoap);
System.out.println("===============(4) "+System.currentTimeMillis());
HTTPConduit conduit = (HTTPConduit) client.getConduit();
System.out.println("===============(5) "+System.currentTimeMillis());
//获取HttpClient代理,并设置代理的端口号,超时时间等。
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
System.out.println("===============(6) "+System.currentTimeMillis());
// 设置代理的ip 和 端口号
// httpClientPolicy.setProxyServer("");
// httpClientPolicy.setProxyServerPort(8080);
// 设置连接超时
httpClientPolicy.setConnectionTimeout(1000);
// 设置读取超时
httpClientPolicy.setReceiveTimeout(1000);
conduit.setClient(httpClientPolicy);
System.out.println("===============(7) "+System.currentTimeMillis());
String runService = hisDataOutSoap .runService(inMsg);
System.out.println("===============(8) "+System.currentTimeMillis());
System.out.println(runService);
}catch (Exception e){
e.printStackTrace();
}

}


@Test
public void cl2() {
// 创建动态客户端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://172.16.10.16:8005/HisDataOut.asmx?wsdl");
HTTPConduit conduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(500); //连接超时时间
policy.setReceiveTimeout(500);//请求超时时间.
conduit.setClient(policy);
// 需要密码的情况需要加上用户名和密码
// client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));
Object[] objects = new Object[0];
try {
Thread.sleep(600);
// invoke("方法名",参数1,参数2,参数3....);
objects = client.invoke("runService", "你好。。。");
System.out.println("返回数据:" + objects[0]);
} catch (Exception e) {
e.printStackTrace();
}
}


@Test
public void cl3() {
String wsdlUrl = "http://172.16.10.16:8005/HisDataOut.asmx?wsdl";
// 动态调用的客户端工厂类
DynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
final Client client = dcf.createClient(wsdlUrl);
// 设置超时单位为毫秒
HTTPConduit conduit = (HTTPConduit)client.getConduit();
HTTPClientPolicy policy = new HTTPClientPolicy();
policy.setConnectionTimeout(100);
policy.setAllowChunking(false);
policy.setReceiveTimeout(300);
conduit.setClient(policy);
final String param = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><DATA><OUTPUT><STATUS></STATUS><MESSAGE></MESSAGE></OUTPUT></DATA>";
Object[] objects = new Object[0];
try {
objects = client.invoke("openService", param);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(objects[0]);
}


[size=48px]我尝试了每种设置超时的方法,当我的url地址无效的时候,或者连接的ip地址ping不通的时候,问题就出现了,我设置的超时一点作用也没有[/size]
...全文
475 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 sk815 的回复:
你这样测试不行的··超时时间不是体现在网络不通的时候的
那我想在url地址无效的时候,或者连接的ip地址ping不通的时候获取连接超时的异常,应该怎么写?
sk815 2018-11-19
  • 打赏
  • 举报
回复
你这样测试不行的··超时时间不是体现在网络不通的时候的

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧