我需要在SOAP响应中添加自定义头,并从SOAP请求中读取头信息。目前我参考了以下链接link1和link2,做出如下修改。
Web Service类:
当我调用这个Tester类时,它会正确地输出"Hello ashish!",并且我的
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService()
@HandlerChain(name = "SoapHandler", file = "soaphandler.xml")
public class FooService {
@WebMethod()
public String sayHello(String name) {
System.out.println("Hello: " + name);
return "Hello " + name + "!";
}
}
SOAP处理程序类:
package com.webservice;
import java.util.Set;
import java.util.logging.Logger;
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 SoapHandler implements SOAPHandler<SOAPMessageContext> {
private static final Logger LOGGER = Logger.getLogger(SoapHandler.class.getName());
@Override
public void close(MessageContext arg0) {
System.out.println("Colse Method");
LOGGER.info("Close Method");
}
@Override
public boolean handleFault(SOAPMessageContext arg0) {
System.out.println("handleFault Method");
LOGGER.info("handleFault Method");
return false;
}
@Override
public boolean handleMessage(SOAPMessageContext arg0) {
System.out.println("handleMessage Method");
LOGGER.info("handleMessage Method");
return false;
}
@Override
public Set<QName> getHeaders() {
System.out.println("getHeaders Method");
LOGGER.info("getHeaders Method");
return null;
}
}
Tester Class
public class Tester {
/**
* @param args
*/
public static void main(String[] args) {
try {
FooServiceServiceLocator locator = new FooServiceServiceLocator();
FooService fooService = locator.getFooServicePort();
System.out.println(fooService.sayHello("ashish"));
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
处理程序链配置:
<?xml version="1.0" encoding="UTF-8"?>
<jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee">
<jws:handler-chain>
<jws:handler>
<jws:handler-name>SoapHandler</jws:handler-name>
<jws:handler-class>com.webservice.SoapHandler</jws:handler-class>
</jws:handler>
</jws:handler-chain>
</jws:handler-chains>
当我调用这个Tester类时,它会正确地输出"Hello ashish!",并且我的
handleMessage(SOAPMessageContext arg0)
方法在请求进来和出去时都被执行了,那么我该如何区分传入的请求和传出的响应呢?handleMessage(SOAPMessageContext arg0) method ? so that when request comes in I can read Header and when response goes out then I can Add my header into it Thanks....