双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

一个善良的码农 一个善良的码农 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
@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]
...全文

相关推荐

评论 2
收藏 已收藏
分享
返回顶部
一个善良的码农
Java 51,407 成员 86,133 内容