Handler非常像Servlet技术中的Filter。我们知道,在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请求进行过滤,然后才到达提供服务的Servlet,这些Filter的功能往往是对请求进行统一编码,对用户进行认证,把用户的访问写入系统日志等。相应的,Web服务中的Handler通常也提供以下的功能:
- 对客户端进行认证、授权;
- 把用户的访问写入系统日志;
- 对请求的SOAP消息进行加密,解密;
- 为Web Services对象做缓存。
新建一个handler
package com.zhutulang.handler;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
importjavax.xml.ws.handler.soap.SOAPMessageContext;
public class HeaderHandler implementsSOAPHandler<SOAPMessageContext> {
@Override
publicboolean handleMessage(SOAPMessageContext context) {
System.out.println("handler");
returnfalse;
}
@Override
publicboolean handleFault(SOAPMessageContext context) {
System.out.println("handleFault");
returnfalse;
}
@Override
publicvoid close(MessageContext context) {
//TODO Auto-generated method stub
}
@Override
publicSet<QName> getHeaders() {
//TODO Auto-generated method stub
returnnull;
}
}
在classpath下新建一个xml文件 handler-chain.xml
<?xml version="1.0"encoding="UTF-8" standalone="yes"?>
<javaee:handler-chains
xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<javaee:handler-chain>
<javaee:handler>
<javaee:handler-class>com.zhutulang.handler.HeaderHandler</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
其中,handler-class 是hanler全路径名。
然后在接口实现类上配置:@HandlerChain(file="handler-chain.xml")
重启服务后,运行test4方法。看到控制台打印出handler ,说明我们配置的handler生效了。