`
8366
  • 浏览: 800958 次
  • 性别: 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毫秒

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics