I want to process SOAP headers with SOAPHandler, i.e. I have created SOAPHandler, but how to plug it to specified service ? In other words to say that this handler should handle messages for this service.. Probably I need to use some annotation or xml configuration ... ?..
            Asked
            
        
        
            Active
            
        
            Viewed 2,230 times
        
    1
            
            
        - 
                    I found the solution. On client side it could be added programmaticaly by additing using BinderProvider. And for services we need to use @HandlerChain annotation and handlers.xml configuration.. – BlackBerry May 18 '12 at 13:42
 - 
                    Also you may try answer from here: http://stackoverflow.com/questions/10654608/add-soap-header-object-using-pure-jax-ws/10674705 – Yuriy Nakonechnyy May 22 '12 at 12:02
 
1 Answers
0
            
            
        This can be done with following steps.
1. Defining the Handler
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. declaring the handler chain declaration in 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. Adding the handler chain for the JAX-WS service implementation
@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;
    }
}
        Chathuranga Tennakoon
        
- 2,059
 - 1
 - 18
 - 20