Как подключить SOAPHandler (JAX-WS)?
Я хочу обработать SOAP-заголовки с помощью SOAPHandler, т.е. я создал SOAPHandler, но как подключить его к указанной службе? Другими словами, чтобы сказать, что этот обработчик должен обрабатывать сообщения для этого сервиса.. Вероятно, мне нужно использовать некоторую аннотацию или конфигурацию XML...?..
1 ответ
Это можно сделать с помощью следующих шагов.
1. Определение обработчика
public class CalculatorSOAPHandlerOne implements SOAPHandler<SOAPMessageContext> {
private static final Logger logger = LoggerFactory.getLogger(CalculatorSOAPHandlerOne.class);
@Override
public Set<QName> getHeaders() {
return null;
}
@Override
public boolean handleMessage(SOAPMessageContext context) {
if(!(Boolean)context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)){
logger.info(" soap message passed through CalculatorSOAPHandlerOne (only for request)");
}
return true;
}
@Override
public boolean handleFault(SOAPMessageContext context) {
return true;
}
@Override
public void close(MessageContext context) {
}
}
2. объявление объявления цепочки обработчика в 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.chathurangaonline.jaxws.samples.handler.CalculatorSOAPHandlerOne</javaee:handler-class>
</javaee:handler>
<javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
3. Добавление цепочки обработчиков для реализации сервиса JAX-WS
@WebService
@HandlerChain(file = "handler-chain.xml")
public class CalculatorService{
private static final Logger logger = LoggerFactory.getLogger(CalculatorServiceImpl.class);
@Override
public double add(double num1, double num2) {
logger.info("== calling add method ==");
return num1 + num2;
}
@Override
public double multiply(double num1, double num2) {
return num1 * num2;
}
}