HandlerChain的SOAPMessageContext getMessage()不发送消息

时间:2018-07-24 14:18:14

标签: java xml soap soaphandler

我有一个SOAP服务,正在尝试向另一台主机发送消息。该消息在发送之前应先添加一些数据,因此我已经在服务提供商类中使用

实现了HandlerChain
@HandlerChain(file="ConsumerDefaultHandler.xml")

此文件包含

<?xml version="1.0" encoding="UTF-8"?>

<jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee">
    <jws:handler-chain name="WebServiceHandlerChain">
        <jws:handler>
            <jws:handler-class>com.company.x.processor.routing.hosts.wsf.WSFConsumerDefaultHandler</jws:handler-class>
         </jws:handler>     
    </jws:handler-chain>
</jws:handler-chains>

此类仅包含

import javax.xml.ws.handler.soap.SOAPMessageContext;

/**
 * WSFConsumerDefaultHandler
 */
public class WSFConsumerDefaultHandler extends WSFBaseHandler {

    @Override
    public boolean handleMessage(SOAPMessageContext context) {
        context.getMessage();
        return true;
    }

}

和WSFBaseHandler:

import java.util.Set;

import javax.xml.namespace.QName;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

/**
 * WSFBaseHandler
 */
public abstract class WSFBaseHandler implements SOAPHandler<SOAPMessageContext> {
    @Override
    public boolean handleFault(SOAPMessageContext context) {
        return false;
    }

    @Override
    public void close(MessageContext context) { }

    @Override
    public Set<QName> getHeaders() {
        return null;
    }
}

我的问题是,由于某种原因,它从不发送数据。如果使用Wireshark观看网络,则可以清楚地看到从未发送过此SOAP消息。不过,奇怪的是,如果我将这一行注释掉:

context.getMessage();

邮件已发送,我已成功收到回复。我真的不确定如何开始调试它,也不知道可能是什么原因。

任何对getMessage()的调用都会停止发送消息。

编辑:只需添加一下,我确实可以打印出SOAPMessage,它确实包含一个完全有效的SOAP请求,可以通过邮递员发送该请求以得到响应。

0 个答案:

没有答案