我必须将自定义标头添加到我的 SOAP 响应中并从 SOAP 请求中读取标头到目前为止我所做的是指此链接link1和link2,如下所示
网络服务类:
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;
}
}
测试员类
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....