【问题标题】:How to plug SOAPHandler (JAX-WS)?如何插入 SOAPHandler (JAX-WS)?
【发布时间】:2012-05-25 21:36:50
【问题描述】:

我想用 SOAPHandler 处理 SOAP 标头,即我已经创建了 SOAPHandler,但是如何将它插入指定的服务?换句话说,这个处理程序应该处理这个服务的消息。可能我需要使用一些注释或xml配置......?..

【问题讨论】:

  • 我找到了解决方案。在客户端,它可以通过使用 BinderProvider 以编程方式添加。而对于服务我们需要使用@HandlerChain注解和handlers.xml配置..
  • 您也可以尝试从这里回答:stackoverflow.com/questions/10654608/…

标签: web-services jax-ws webservice-client jax-ws-customization


【解决方案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;
    }
}

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多