我有一个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请求,可以通过邮递员发送该请求以得到响应。