`
234390216
  • 浏览: 10218790 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462016
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1774438
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1397506
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394706
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679510
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530299
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1180704
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:466032
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151030
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:67735
社区版块
存档分类
最新评论

Java Webservice指定超时时间

阅读更多

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秒,所以在测试的时候你会看到有时候服务调用会超时,有时会正常响应。

 

0
0
分享到:
评论

相关推荐

    Java编程Webservice指定超时时间代码详解

    } } 在Java中,Webservice调用时指定超时时间是一个关键的设置,因为如果没有设定或者设定不当,可能导致程序在等待响应时无限制地阻塞,从而影响整体系统的稳定性和效率。上述代码片段展示了如何在Java中通过JDK...

    java调用webservice的demo

    ` 这两行代码获取了服务的特定端口,并将其转换为指定的接口类型。 - 调用服务方法:在获得了服务端口后,可以直接通过`port`对象调用Web Service的业务方法,如 `String result = port.myWebServiceMethod(param1,...

    php调用java写的webservice

    5. **配置选项**:根据需求,可能需要设置额外的SoapClient选项,如超时时间、证书、代理等。这可以通过传递一个关联数组到SoapClient构造函数来实现。 ```php $options = array( 'connection_timeout' =&gt; 10, ...

    Java调用WebService接口的方法

    本文将深入探讨如何使用Java调用WebService接口,以实例分析有参方法Add的使用技巧。 首先,我们需要了解WebService的基础知识。WebService是一种基于开放标准(如SOAP、WSDL和UDDI)的Web应用程序,它能够通过HTTP...

    Java调用Webservice服务,简单实用

    5. 最后,运行你的Java程序,它将通过Web Service获取并打印出指定城市的天气预报。 在实际开发中,你可能还需要处理异常、设置连接超时、配置SSL等细节。同时,对于大型项目,可能会使用Spring等框架来更优雅地...

    jQuery使用Ajax方法调用WebService

    在实际应用中,你可能还需要处理其他的一些配置,比如设置超时时间(`timeout`),添加自定义HTTP头(`headers`),或者在请求开始和结束时执行特定操作(`beforeSend`和`complete`)。 对于WebService,它通常是基于.NET...

    WebService之JAX-WS自学笔记

    ### 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(客户端)整理.pdf

    【Java调用WebService客户端详解】 在Java开发中,与远程服务进行交互是常见的需求,而WebService作为跨平台、跨语言的通信方式,被广泛应用于分布式系统。本篇将重点介绍如何使用Java作为客户端来调用WebService,...

    Webservice远程调试及超时操作原理解析

    在.NET开发环境中,WebService远程调试是一项重要...如果你需要在其他编程语言如Python、Java或使用特定库如CXF、Suds等调用或实现WebService,也可以参考相关的技术文档和示例代码,以了解如何在不同环境中进行操作。

    webservice测试调用工具

    - 模拟调用:直接发送请求到指定的WebService端点,接收并显示响应结果。 - 参数化测试:支持动态参数,便于进行多种场景的测试。 - 日志记录:记录每次请求和响应的详细信息,便于问题排查。 - 多语言支持:...

    Java使用XFire调用WebService接口.docx

    2. 创建 WebService:在 Toolbars 上选择 New Web Service,选择 Strategy 为 "Create web service from Java class",创建一个新的 Java bean,并为 WebService 命名为 MyService,指定包名为 com.demo.service,...

    QT环境下Webservice服务调用,客户端

    在QT环境下进行Web服务(Webservice)调用是软件开发中的常见需求,特别是当需要与Java环境下的服务器端进行交互时。本篇文章将详细介绍如何在QT中构建客户端,以实现对Java服务器端Webservice服务的有效调用。 ...

    HttpGet 获取webservice 数据

    在这个例子中,我们创建了一个HttpGet对象,指定了目标WebService的URL。然后,我们使用HttpClient执行这个请求,并处理返回的响应。如果响应包含实体(即返回的数据),我们将其转换为字符串并打印出来。 关于...

    springcloud feign 服务消费者 类似 webservice

    2. 配置Feign的客户端,包括超时时间、连接池大小等。 3. 当服务提供者不可用或网络问题导致请求失败时,可以通过Hystrix进行回退处理。 4. 可以通过日志配置来追踪Feign的请求和响应,便于排查问题。 总之,Spring...

    WebService(WEB服务)--获取网络数据

    4. **HTTP请求与响应**: 为了获取网络数据,`ExchangeRateXML.java`会发送HTTP请求到指定的WebService URL,然后接收并处理服务器返回的响应。这可能涉及到`java.net.HttpURLConnection`或第三方库如Apache ...

    java调用.net写的Webservice[归类].pdf

    本文将详细探讨如何使用Java的Axis1.x库来调用.NET WebService,并介绍在此过程中可能遇到的问题及解决方案。 首先,让我们了解如何使用Axis1.x调用Web服务。在Java中,你需要创建一个`Service`对象,然后通过这个...

    WebService发送短信

    新浪提供了开放的API接口,允许开发者通过WebService接口向指定手机号码发送短信。在使用此服务前,你需要先在新浪的开发者平台上注册并获取API密钥。这个过程通常包括提供开发者信息、申请权限以及签署相关的服务...

    cfx webservice 入门 详细步骤

    `session-config` 部分设置了会话超时时间,即客户端无活动的会话将在60分钟后自动结束。 ```xml &lt;!-- web.xml 配置 --&gt; &lt;description&gt;Apache CXF Endpoint &lt;display-name&gt;cxf &lt;servlet-name&gt;cxf ...

    java调用webservice源码范例(由浅入深代码范例和详细说明)(合集).docx

    在Java开发中,调用Web服务是常见的任务,特别是在分布式系统和企业级应用之间需要进行数据交换时。Web服务允许应用程序通过标准化的协议,如HTTP、SOAP和XML,跨越网络进行通信。本篇文章将深入探讨如何使用Java...

    restful webservice in springMVC Demo

    例如,`@GetMapping("/users/{id}")`可以用来获取指定ID的用户信息。 4. **数据转换**:Spring MVC提供ModelAndView、ResponseEntity、@ResponseBody等机制将处理结果转化为HTTP响应。对于JSON格式的数据,可以使用...

Global site tag (gtag.js) - Google Analytics