0

我想用SOAPHandler處理SOAP頭,即我創建了SOAPHandler,但是如何將它插入指定的服務?換句話說,這個處理程序應該處理這個服務的消息..可能我需要使用一些註釋或者xml配置......?如何插入SOAPHandler(JAX-WS)?

+0

我找到了解決方案。在客戶端,可以通過使用BinderProvider進行添加來添加程序。而對於服務,我們需要使用@HandlerChain註釋和handlers.xml配置.. – BlackBerry

+0

也可以嘗試從這裏回答: http://stackoverflow.com/questions/10654608/add-soap-header-object-using-pure -jax-WS/10674705 – Yura

回答

0

這可以通過以下步驟完成。

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 處理程序鏈聲明(處理程序-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; 
    } 
}