`
8366
  • 浏览: 813146 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

webservice 高级应用之Handler的使用

阅读更多

 

 

客户端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 webservice教程,soap wsdl密码验证,webservice高级应用

    本教程将聚焦于PHP的Web服务实现,特别是SOAP(Simple Object Access Protocol)协议以及WSDL(Web Services Description Language)的密码验证功能,这些都是Web服务高级应用的重要组成部分。 首先,我们要理解...

    Webservice之Axis高级编程

    3. **AXIS第三课:AXIS高级应用,使用Handler来增强Web服务的功能** Handler是Axis中一个强大的特性,允许开发者插入自定义逻辑在服务处理流程的各个阶段。你可以通过编写Handler来实现如认证、日志记录、消息转换...

    Android高级应用源码-Android调用Webservice.zip

    本资源"Android高级应用源码-Android调用Webservice.zip"提供了一个详细的示例,帮助开发者理解如何在Android应用程序中集成和使用Web服务。本文将深入探讨相关知识点。 一、Web Service简介 Web Service是一种基于...

    Android高级应用源码-android机票查询源码webservice实现.zip

    在移动开发领域,Android作为主流的操作系统之一,其高级应用开发技术不断演进。本资料主要探讨的是一个基于Webservice实现的Android机票查询源码,它展示了如何在Android平台上构建一个功能完善的机票查询系统。...

    使用jboss netty 创建高性能webservice客户端及服务端

    最后,标签中的"源码"提示我们要关注Netty的底层实现,通过阅读和分析源码,我们可以学习到更多关于网络编程的高级技巧。而"工具"则表明Netty是一个强大的工具,可以帮助开发者快速、高效地完成网络应用的开发。对于...

    Axis webService 教程.pdf

    - **示例**: 在WSDD文件中配置Handler,例如使用`org.apache.axis.handlers.soap.LogHandler`进行日志记录。 ##### 2.4 高级特性Chain - **定义**: Chain机制允许将多个Handler串联起来,形成一条处理链。 - **示例...

    Axis WebService 技术指南,开发文档

    本指南将详细介绍如何使用 Axis 进行 WebService 开发,包括从基础入门到高级特性的应用。 ### 1. Axis 简单入门 在开始之前,你需要从官方网站下载 Axis 的工程和必要的库文件,例如 `axis-bin-1.4`。解压缩后,...

    Android调用Java WebService的实现方法.zip

    3. **使用HTTP库**:Android原生API提供HttpURLConnection类来处理HTTP请求,但在现代应用中,我们通常使用更高级的库,如Apache HttpClient或者OkHttp,它们提供了更方便的API和更好的性能。 4. **构建请求**:...

    android 客户端与webservice之间的交互

    7. **异步处理**:考虑到Android应用的UI线程不能被阻塞,通常使用AsyncTask、Handler、Thread或ExecutorService等进行异步网络请求。 总的来说,Android客户端与Java Web编写的Web Service交互涉及网络编程、HTTP...

    Axis高级编程

    #### 三、AXIS高级应用,使用Handler来增强Web服务的功能 **知识点概述:** 本节介绍如何使用Handler来扩展Axis的Web服务功能,增强其灵活性和安全性。 **知识点详述:** 1. **Handler的定义** - Handler是在...

    Axis 开发指南

    WebService的开源实现众多,其中Apache Axis是较为成熟的框架之一,尤其在Java领域应用广泛。Axis支持SOAP协议,能够简化WebService的创建、部署和调用过程,同时具备丰富的文档和社区支持,使得开发者能够快速上手...

    java_webservice_axis2简单开发实例

    理解这些基础概念后,你可以进一步学习Axis2的高级特性,如安全、传输协议、消息格式等,以满足更复杂的业务需求。在实际开发中,了解如何利用Axis2和其他Web Service框架(如JAX-WS)将有助于你构建健壮、高效的...

    Axis1.4_开发指南

    WSDD文件中的高级特性包括使用Handler(处理程序)来修改消息的处理流程,以及Chain(链)特性,它允许在处理消息时串联多个Handler进行一系列的操作。 ### 处理复杂对象的传递 Axis允许在WebService中传递复杂...

    webService调用实例

    因此,可能的实现方式包括使用AsyncTask、Handler、Looper,或者更现代的RxJava、Kotlin协程等异步处理技术。理解这些异步机制,并能正确地将网络调用封装在其中,是Android开发者的必备技能。 4. **XML和JSON解析*...

    webservice,cxf

    总之,这个压缩包提供了从基础到高级的Web服务开发教程,涵盖了纯JDK、CXF、Spring和Ajax的整合,以及拦截器的使用。通过学习和实践,开发者可以掌握Web服务开发的核心技术,并灵活运用到实际项目中。

    Netty的技术的总结(Marshalling编解码,tcp的拆包粘包,webservice),包括新手入门源码,注释清楚,绝对物超所值

    **Web服务(webservice)**:Web服务是一种基于互联网的软件应用,允许不同系统之间交换数据。Netty虽然不是专门设计用来构建Web服务的,但其强大的网络通信能力使其可以作为构建高效Web服务的基础。 **P2P(对等...

    WebService+ksoap2列车时刻表

    通过这个项目,开发者不仅可以学习到Android应用开发的基本技能,还能深入理解网络请求、数据解析以及如何与Web Service进行交互等高级主题。对于想要提升Android开发能力的人来说,这是一个很好的实践案例。

    WebServiceWSDD上传服务器部署server-config.wsdd文件

    在本主题中,我们将深入探讨如何使用WSDD(Web Services Deployment Descriptor)文件来部署一个WebService到服务器上,以及与之相关的`web.xml`配置文件。 **什么是WSDD?** WSDD,全称Web Services Deployment ...

    WSIT指南-jax-ws指南

    ### WSIT指南-jax-ws指南 ...不仅可以快速构建功能完善的Web服务,还可以轻松地实现安全性和高级功能,如使用Handler进行消息处理。对于那些希望利用现代Web服务技术的开发者来说,这是一种非常有价值的学习资源。

Global site tag (gtag.js) - Google Analytics