webservice的handler分为LogicalHandler和SOAPHandler两种。可以实现在客户端及服务器端。相当于struts中的过滤器的概念。在客户端先按顺序执行LogicalHandler然后按顺序执行SOAPHandler,服务期端则正好相反。Handler可以处理消息发送前后及返回错误各种情况。具体的执行过程如下:
首先我们将我们的wsdl通过wsimport执行来生成webservice的客户端java代码。
第一步我们先创建一个自己的handler继承自SOAPHandler:
package service.ps.smile.com.handler;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
public class HeaderHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext context) {
System.out.println("headerHandler");
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
System.out.println("error");
return false;
}
@Override
public void close(MessageContext context) {
}
@Override
public Set<QName> getHeaders() {
return null;
}
}
第二步对handler进行配置:
在工程src下创建一个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>service.ps.smile.com.handler.HeaderHandler</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
第三步在webserviceclient对应的类中增加注解:
@HandlerChain(file="handler-chain.xml")
第四步我们创建一个测试类:
package service.ps.smile.com;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
MyServiceImplService myimpService = new MyServiceImplService();
IMyService ms = myimpService.getMyServiceImplPort();
try {
ms.login("123", "123");
System.out.println("end");
} catch (UserException_Exception e) {
System.out.println(e.getMessage());
}
}
}
运行结果如下:
headerHandler
error
用户不存在