本人用cxf做webservice的客户端开发超时设置的问题
@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]
...全文
相关推荐
CXF作为客户端调用webService的demo
该项目演示了如何使用Apache CXF框架的JaxWsDynamicClientFactory创建动态客户端,调用基于WSDL的远程WebService接口。通过传递XML参数调用receiveRe
基于Apache CXF的WebService服务端与客户端开发实战
Apache CXF 是当前 Java 领域中最成熟、功能最全面的 WebService 框架之一,广泛应用于企业级服务集成场景。它不仅支持标准的 SOAP/WSDL 协议栈,还提供了对 RESTful 服务、JAX-WS、JAX-RS 等多种编程模型的良好支持。其模块化设计和高度可扩展性使其成为构建高可用、高性能分布式系统的首选工具链。
webservice cxf 服务端客户端传递参数的例子demo
下面我们将深入探讨"webservice CXF 服务端客户端传递参数的例子demo"。1. **CXF框架介绍** CXF是一个Java框架,它允许开发者通过简单的API来创建和使用Web服务。
WebService开发客户端 cxf方式
本篇文章将详细探讨如何使用CXF框架来开发WebService客户端。
CXF实现简单的WebService接口开发
这使得CXF成为企业级Web服务开发的强大工具。通过阅读相关的博客和实践上述步骤,你可以深入理解CXF的工作原理,并掌握使用CXF开发WebService的基本流程。"



