【发布时间】:2010-10-19 14:28:13
【问题描述】:
我正在为我的网络服务使用 Apache CXF。我创建了一个AbstractSoapInterceptor 的实例。在其public void handleMessage(SoapMessage message) throws Fault 方法中,我想将截获消息的 XML 内容打印到控制台。我怎样才能做到这一点?
【问题讨论】:
标签: java web-services soap cxf
我正在为我的网络服务使用 Apache CXF。我创建了一个AbstractSoapInterceptor 的实例。在其public void handleMessage(SoapMessage message) throws Fault 方法中,我想将截获消息的 XML 内容打印到控制台。我怎样才能做到这一点?
【问题讨论】:
标签: java web-services soap cxf
检查this 并搜索入站拦截器。将其放在这里以供参考...
public class InterceptorMensajeSOAPIn extends AbstractSoapInterceptor {
private static Logger log =
Logger.getLogger(InterceptorMensajeSOAPIn.class);
private SAAJInInterceptor saajIn = new SAAJInInterceptor();
public InterceptorMensajeSOAPIn(){
super(Phase.PRE_PROTOCOL);
getAfter().add(SAAJInInterceptor.class.getName());
}
public void handleMessage(SoapMessage message) throws Fault {
SOAPMessage soapMessage = getSOAPMessage(message);
try {
soapMessage.writeTo(System.out);
} catch (Exception e) {
e.printStackTrace();
}
}
private SOAPMessage getSOAPMessage(SoapMessage smsg){
SOAPMessage soapMessage = smsg.getContent(SOAPMessage.class);
if (soapMessage == null) {
saajIn.handleMessage(smsg);
soapMessage = smsg.getContent(SOAPMessage.class);
}
return soapMessage;
}
}
【讨论】:
您有什么理由不能只使用 CXF 附带的 LoggingInInterceptor?您可以直接获取代码并将其用作基础,但在 2.3 中,LoggingInInterceptor 得到了增强,允许指定要使用的打印流等,因此它可能“正常工作”。
【讨论】:
您也可以为此使用一个功能:org.apache.cxf.feature.LoggingFeature:
<jaxws:endpoint ...>
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature"/>
</jaxws:features>
</jaxws:endpoint>
【讨论】: