Java Webservice指定超时时间
使用JDK对Webservice的支持进行Webservice调用时通常的操作步骤如下:
//1、创建一个javax.xml.ws.Service实例
javax.xml.ws.Service service = javax.xml.ws.Service.create(wsdl, serviceName);
//2、通过Service实例获取对应的服务接口的代理
HelloService helloService = service.getPort(portName, HelloService.class);
//3、通过获取到的Webservice服务接口的代理调用对应的服务方法
helloService.sayHello("Elim")
在上述的步骤一在构建Service实例的同时,在Service内部会构建一个ServiceDelegate类型的对象赋给属性delegate,内部持有。然后在第二步会利用delegate创建一个服务接口的代理对象,同时还会代理BindingProvider和Closeable接口。然后在第三步真正发起接口请求时,内部会发起一个HTTP请求,发起HTTP请求时会从BindingProvider的getRequestContext()返回结果中获取超时参数,分别对应com.sun.xml.internal.ws.connection.timeout和com.sun.xml.internal.ws.request.timeout参数,前者是建立连接的超时时间,后者是获取请求响应的超时时间,单位是毫秒。如果没有指定对应的超时时间或者指定的超时时间为0都表示永不超时。所以为了指定超时时间我们可以从BindingProvider下手。比如:
public class Client {
public static void main(String[] args) throws Exception {
String targetNamespace = "http://test.elim.com/ws";
QName serviceName = new QName(targetNamespace, "helloService");
QName portName = new QName(targetNamespace, "helloService");
URL wsdl = new URL("http://localhost:8888/hello");
//内部会创建一个ServiceDelegate类型的对象赋给属性delegate
Service service = Service.create(wsdl, serviceName);
//会利用delegate创建一个服务接口的代理对象,同时还会代理BindingProvider和Closeable接口。
HelloService helloService = service.getPort(portName, HelloService.class);
BindingProvider bindingProvider = (BindingProvider) helloService;
Map<String, Object> requestContext = bindingProvider.getRequestContext();
requestContext.put("com.sun.xml.internal.ws.connection.timeout", 10 * 1000);//建立连接的超时时间为10秒
requestContext.put("com.sun.xml.internal.ws.request.timeout", 15 * 1000);//指定请求的响应超时时间为15秒
//在调用接口方法时,内部会发起一个HTTP请求,发起HTTP请求时会从BindingProvider的getRequestContext()返回结果中获取超时参数,
//分别对应com.sun.xml.internal.ws.connection.timeout和com.sun.xml.internal.ws.request.timeout参数,
//前者是建立连接的超时时间,后者是获取请求响应的超时时间,单位是毫秒。如果没有指定对应的超时时间或者指定的超时时间为0都表示永不超时。
System.out.println(helloService.sayHello("Elim"));
}
}
完整示例如下:
服务接口:
@WebService(portName="helloService", serviceName="helloService", targetNamespace="http://test.elim.com/ws")
public interface HelloService {
String sayHello(String name);
}
服务接口实现:
@WebService(portName="helloService", serviceName="helloService", targetNamespace="http://test.elim.com/ws")
public class HelloServiceImpl implements HelloService {
private Random random = new Random();
@Override
public String sayHello(String name) {
try {
TimeUnit.SECONDS.sleep(5 + random.nextInt(21));//随机睡眠5-25秒
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello " + name;
}
}
服务端代码:
public class Server {
public static void main(String[] args) {
Endpoint.publish("http://localhost:8888/hello", new HelloServiceImpl());
}
}
在上述的服务端代码中随机睡眠了5-25秒,而客户端指定的超时时间是15秒,所以在测试的时候你会看到有时候服务调用会超时,有时会正常响应。
相关推荐
} } 在Java中,Webservice调用时指定超时时间是一个关键的设置,因为如果没有设定或者设定不当,可能导致程序在等待响应时无限制地阻塞,从而影响整体系统的稳定性和效率。上述代码片段展示了如何在Java中通过JDK...
` 这两行代码获取了服务的特定端口,并将其转换为指定的接口类型。 - 调用服务方法:在获得了服务端口后,可以直接通过`port`对象调用Web Service的业务方法,如 `String result = port.myWebServiceMethod(param1,...
5. **配置选项**:根据需求,可能需要设置额外的SoapClient选项,如超时时间、证书、代理等。这可以通过传递一个关联数组到SoapClient构造函数来实现。 ```php $options = array( 'connection_timeout' => 10, ...
本文将深入探讨如何使用Java调用WebService接口,以实例分析有参方法Add的使用技巧。 首先,我们需要了解WebService的基础知识。WebService是一种基于开放标准(如SOAP、WSDL和UDDI)的Web应用程序,它能够通过HTTP...
5. 最后,运行你的Java程序,它将通过Web Service获取并打印出指定城市的天气预报。 在实际开发中,你可能还需要处理异常、设置连接超时、配置SSL等细节。同时,对于大型项目,可能会使用Spring等框架来更优雅地...
在实际应用中,你可能还需要处理其他的一些配置,比如设置超时时间(`timeout`),添加自定义HTTP头(`headers`),或者在请求开始和结束时执行特定操作(`beforeSend`和`complete`)。 对于WebService,它通常是基于.NET...
### WebService之JAX-WS自学笔记 #### JAX-WS概述 JAX-WS (Java API for XML-Based Web Services) 是 Java 平台上用于构建和访问 Web 服务的 API。JAX-WS 2.0 作为 JAX-RPC 1.0 规范的扩展,是其后续版本,并在 ...
【Java调用WebService客户端详解】 在Java开发中,与远程服务进行交互是常见的需求,而WebService作为跨平台、跨语言的通信方式,被广泛应用于分布式系统。本篇将重点介绍如何使用Java作为客户端来调用WebService,...
在.NET开发环境中,WebService远程调试是一项重要...如果你需要在其他编程语言如Python、Java或使用特定库如CXF、Suds等调用或实现WebService,也可以参考相关的技术文档和示例代码,以了解如何在不同环境中进行操作。
- 模拟调用:直接发送请求到指定的WebService端点,接收并显示响应结果。 - 参数化测试:支持动态参数,便于进行多种场景的测试。 - 日志记录:记录每次请求和响应的详细信息,便于问题排查。 - 多语言支持:...
2. 创建 WebService:在 Toolbars 上选择 New Web Service,选择 Strategy 为 "Create web service from Java class",创建一个新的 Java bean,并为 WebService 命名为 MyService,指定包名为 com.demo.service,...
在QT环境下进行Web服务(Webservice)调用是软件开发中的常见需求,特别是当需要与Java环境下的服务器端进行交互时。本篇文章将详细介绍如何在QT中构建客户端,以实现对Java服务器端Webservice服务的有效调用。 ...
你需要创建一个文件流对象,指定文件的保存路径,然后将解码后的二进制数据写入到流中。 5. **WebService接口设计**:在ASP.NET中,可以使用`System.Web.Services.WebService`或`System.ServiceModel`(WCF服务)来...
在这个例子中,我们创建了一个HttpGet对象,指定了目标WebService的URL。然后,我们使用HttpClient执行这个请求,并处理返回的响应。如果响应包含实体(即返回的数据),我们将其转换为字符串并打印出来。 关于...
2. 配置Feign的客户端,包括超时时间、连接池大小等。 3. 当服务提供者不可用或网络问题导致请求失败时,可以通过Hystrix进行回退处理。 4. 可以通过日志配置来追踪Feign的请求和响应,便于排查问题。 总之,Spring...
4. **HTTP请求与响应**: 为了获取网络数据,`ExchangeRateXML.java`会发送HTTP请求到指定的WebService URL,然后接收并处理服务器返回的响应。这可能涉及到`java.net.HttpURLConnection`或第三方库如Apache ...
本文将详细探讨如何使用Java的Axis1.x库来调用.NET WebService,并介绍在此过程中可能遇到的问题及解决方案。 首先,让我们了解如何使用Axis1.x调用Web服务。在Java中,你需要创建一个`Service`对象,然后通过这个...
新浪提供了开放的API接口,允许开发者通过WebService接口向指定手机号码发送短信。在使用此服务前,你需要先在新浪的开发者平台上注册并获取API密钥。这个过程通常包括提供开发者信息、申请权限以及签署相关的服务...
`session-config` 部分设置了会话超时时间,即客户端无活动的会话将在60分钟后自动结束。 ```xml <!-- web.xml 配置 --> <description>Apache CXF Endpoint <display-name>cxf <servlet-name>cxf ...
在Java开发中,调用Web服务是常见的任务,特别是在分布式系统和企业级应用之间需要进行数据交换时。Web服务允许应用程序通过标准化的协议,如HTTP、SOAP和XML,跨越网络进行通信。本篇文章将深入探讨如何使用Java...