Как подключить SOAPHandler (JAX-WS)?

Я хочу обрабатывать заголовки SOAP с помощью SOAPHandler, т.е. я создал SOAPHandler, но как подключить его к указанной службе? Другими словами, чтобы сказать, что этот обработчик должен обрабатывать сообщения для этой службы.. Возможно, мне нужно использовать какую-то аннотацию или конфигурацию xml...?..


person BlackBerry    schedule 18.05.2012    source источник
comment
Я нашел решение. На стороне клиента его можно добавить программно, добавив с помощью BinderProvider. А для сервисов нам нужно использовать аннотацию @HandlerChain и конфигурацию handlers.xml.   -  person BlackBerry    schedule 18.05.2012
comment
Также вы можете попробовать ответить здесь: stackoverflow.com/questions/10654608/   -  person Yuriy Nakonechnyy    schedule 22.05.2012


Ответы (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;
    }
}
person Chathuranga Tennakoon    schedule 08.02.2015