客户端Handler的使用:
webservice 超时的问题,在代码级别可以
Service service = new Service();
Call call = (Call)service.createCall();
call.setTimeout(5000);
不过要是在项目中有
1:使用的这种方式调用webservice
2:有人使用的是使用wsdl地址直接生成的本地框架完成客户端得调用
3:MessageFactory messageFactory=MessageFactory.newInstance();
SOAPMessage reqMsg = messageFactory.createMessage();
发送soap消息的方式
那么你在代码里显示的调用设置的超时的方法 就是一个侵入式的设计,并不是所有的开发人员都会设置超时,
由于项目中使用的是axis的 webservice 框架,我们可以使用客户端得Handler
axis 当初的设计就给客户端和服务器留下了充足的余地,配置服务器端的Handler配置在 server-config.wsdd文件中,而客户端得Handler 就配置在 client-config.wsdd 文件中(在axis包中的org.apache.axis.client 下),下面我们配置客户端的Handler ,在这个handler 中我们只设置一个超时时间,项目中所有应用的webservice所有的客户端的调用都会被这个handler 截获,从而统一设置超时时间。
步骤:
1. 编写客户端Handler 处理类,继承BaseHandler
package cn.com.xinli.netb.ejb.wsdl;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
import org.apache.log4j.Logger;
/**
*
* webserice 超时处理器,网厅所有的webservice接口都会被这个Handler截获
* 超时处理器的超时时间从配置文件client-config.wsdd中读取
*
* @author Owner
*
*/
public class WebServiceHandler extends BasicHandler
{
Logger log=Logger.getLogger(WebServiceHandler.class);
public void invoke(MessageContext messageContext) throws AxisFault
{
String timeout=(String)this.getOption("timeout");
if("".equals(timeout)||timeout==null )
{
timeout="60000";
}
/*设置webservice客户端调用的超时时间是60秒
* 这个设置会覆盖 你显示的调用 call.setTimeOut();
* */
log.info("webservice 超时过滤器被调用,默认的超时时间是"+timeout+"毫秒");
messageContext.setTimeout(Integer.parseInt(timeout));
}
}
步骤2:客户端配置文件 放在src下
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig"
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<!-- webservice 客户端超时处理器,默认超时时间为60秒 -->
<requestFlow>
<handler name="TimeOutControl" type="java:cn.com.xinli.netb.ejb.wsdl.WebServiceHandler">
<parameter name="timeout" value="60000"/>
</handler>
</requestFlow>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
</globalConfiguration>
<transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
<transport name="local" pivot="java:org.apache.axis.transport.local.LocalSender"/>
<transport name="java" pivot="java:org.apache.axis.transport.java.JavaSender"/>
</deployment>
编译运行,当系统调用其他系统的webservice 服务器端得时候:
485 [main] INFO cn.com.xinli.WebServiceHandler(29) - webservice 超时过滤器被调用,默认的超时时间是60000毫秒
分享到:
相关推荐
本教程将聚焦于PHP的Web服务实现,特别是SOAP(Simple Object Access Protocol)协议以及WSDL(Web Services Description Language)的密码验证功能,这些都是Web服务高级应用的重要组成部分。 首先,我们要理解...
3. **AXIS第三课:AXIS高级应用,使用Handler来增强Web服务的功能** Handler是Axis中一个强大的特性,允许开发者插入自定义逻辑在服务处理流程的各个阶段。你可以通过编写Handler来实现如认证、日志记录、消息转换...
本资源"Android高级应用源码-Android调用Webservice.zip"提供了一个详细的示例,帮助开发者理解如何在Android应用程序中集成和使用Web服务。本文将深入探讨相关知识点。 一、Web Service简介 Web Service是一种基于...
在移动开发领域,Android作为主流的操作系统之一,其高级应用开发技术不断演进。本资料主要探讨的是一个基于Webservice实现的Android机票查询源码,它展示了如何在Android平台上构建一个功能完善的机票查询系统。...
最后,标签中的"源码"提示我们要关注Netty的底层实现,通过阅读和分析源码,我们可以学习到更多关于网络编程的高级技巧。而"工具"则表明Netty是一个强大的工具,可以帮助开发者快速、高效地完成网络应用的开发。对于...
- **示例**: 在WSDD文件中配置Handler,例如使用`org.apache.axis.handlers.soap.LogHandler`进行日志记录。 ##### 2.4 高级特性Chain - **定义**: Chain机制允许将多个Handler串联起来,形成一条处理链。 - **示例...
本指南将详细介绍如何使用 Axis 进行 WebService 开发,包括从基础入门到高级特性的应用。 ### 1. Axis 简单入门 在开始之前,你需要从官方网站下载 Axis 的工程和必要的库文件,例如 `axis-bin-1.4`。解压缩后,...
3. **使用HTTP库**:Android原生API提供HttpURLConnection类来处理HTTP请求,但在现代应用中,我们通常使用更高级的库,如Apache HttpClient或者OkHttp,它们提供了更方便的API和更好的性能。 4. **构建请求**:...
7. **异步处理**:考虑到Android应用的UI线程不能被阻塞,通常使用AsyncTask、Handler、Thread或ExecutorService等进行异步网络请求。 总的来说,Android客户端与Java Web编写的Web Service交互涉及网络编程、HTTP...
#### 三、AXIS高级应用,使用Handler来增强Web服务的功能 **知识点概述:** 本节介绍如何使用Handler来扩展Axis的Web服务功能,增强其灵活性和安全性。 **知识点详述:** 1. **Handler的定义** - Handler是在...
WebService的开源实现众多,其中Apache Axis是较为成熟的框架之一,尤其在Java领域应用广泛。Axis支持SOAP协议,能够简化WebService的创建、部署和调用过程,同时具备丰富的文档和社区支持,使得开发者能够快速上手...
理解这些基础概念后,你可以进一步学习Axis2的高级特性,如安全、传输协议、消息格式等,以满足更复杂的业务需求。在实际开发中,了解如何利用Axis2和其他Web Service框架(如JAX-WS)将有助于你构建健壮、高效的...
WSDD文件中的高级特性包括使用Handler(处理程序)来修改消息的处理流程,以及Chain(链)特性,它允许在处理消息时串联多个Handler进行一系列的操作。 ### 处理复杂对象的传递 Axis允许在WebService中传递复杂...
因此,可能的实现方式包括使用AsyncTask、Handler、Looper,或者更现代的RxJava、Kotlin协程等异步处理技术。理解这些异步机制,并能正确地将网络调用封装在其中,是Android开发者的必备技能。 4. **XML和JSON解析*...
总之,这个压缩包提供了从基础到高级的Web服务开发教程,涵盖了纯JDK、CXF、Spring和Ajax的整合,以及拦截器的使用。通过学习和实践,开发者可以掌握Web服务开发的核心技术,并灵活运用到实际项目中。
**Web服务(webservice)**:Web服务是一种基于互联网的软件应用,允许不同系统之间交换数据。Netty虽然不是专门设计用来构建Web服务的,但其强大的网络通信能力使其可以作为构建高效Web服务的基础。 **P2P(对等...
通过这个项目,开发者不仅可以学习到Android应用开发的基本技能,还能深入理解网络请求、数据解析以及如何与Web Service进行交互等高级主题。对于想要提升Android开发能力的人来说,这是一个很好的实践案例。
在本主题中,我们将深入探讨如何使用WSDD(Web Services Deployment Descriptor)文件来部署一个WebService到服务器上,以及与之相关的`web.xml`配置文件。 **什么是WSDD?** WSDD,全称Web Services Deployment ...
### WSIT指南-jax-ws指南 ...不仅可以快速构建功能完善的Web服务,还可以轻松地实现安全性和高级功能,如使用Handler进行消息处理。对于那些希望利用现代Web服务技术的开发者来说,这是一种非常有价值的学习资源。