客户端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高级应用; 好用一定要给好评哦
Webservice之Axis高级编程 Axis2是目前比较流行的WebService引擎。WebService被应用在很多不同的场景。例如,可以使用WebService来发布服务端 Java类的方法,以便使用不同的客户端进行调用。这样可以有效地集成多种...
WebService应用实例,WebService应用实例
java-WebService应用实例中包括所用的jar包,说明文档,还收集的Spring集成XFire开发WebService的应用
xfire在webservice的应用xfire在webservice的应用
springboot+webservice搭建webservice服务端及使用java客户端两种方式进行调用webservice接口
优化官方Webservice Handler代码,详情查看:http://blog.csdn.net/jptiancai/article/details/23770713
Android使用kotlin协程+ksoap2实现WebService操作,目标API30,并解决异步通信时Handler()过时的问题
C#webservice应用例子(含头验证) 其中包含详细的源代码和注释说明
01.WebService概述和WebService在企业应用中的作用
例如,可以使用WebService来发布服务端 Java类的方法,以便使用不同的客户端进行调用。这样可以有效地集成多种不同的技术来完成应用系统。WebService还经常被使用在SOA中,用于 SOA各个部分交换数据。本课程重点讲解...
本文首先对WebService技术进行了简介,在了解它的使用情况和优缺点后,对它和目前现有分布式CORBA技术进行了分析和对比,进而对它的体系结构有深入的了解。其次介绍了WebService技术中的关键技术,其中包括可扩展性...
GZT的webservice应用GZT的webservice应用GZT的webservice应用
线程的使用、*NET 2.0 新特性、webservice 文件监视、C#高级应用(如何将聊天程序做成windows服务、COM+服务解决同时访问大量数据并发性、COM+服务实现银行转账系统、如何用Remoting技术传送文件、大规模数据访问时...
WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2
WebService模型(三种应用技术标准) WebService在Internet网的实战应用 WebService模型(三种应用技术标准) 如何创建WebService服务 如何部署WebService服务 如何使用WebService服务 总结
手动加载WebService服务端应用程序,手动加载WebService服务端应用程序
WebService在.NET中的实战应用,通过实例来增强编程能力
WebService应用实例,内附教程地址