我正在使用Apache CXF作为我的webservices。我创建了一个AbstractSoapInterceptor
的实例。在public void handleMessage(SoapMessage message) throws Fault
方法中,我想将截获的消息的XML内容打印到控制台。我怎样才能做到这一点?
答案 0 :(得分:8)
检查this并搜索INBOUND INTERCEPTOR。将它放在这里供参考......
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;
}
}
答案 1 :(得分:2)
您有什么理由不能使用CXF附带的LoggingInInterceptor
吗?你可以抓住它的代码并使用它作为基础,但是在2.3中,LoggingInInterceptor
被增强了以允许指定一个打印流等使用,所以它可能“只是工作”。
答案 2 :(得分:1)
您还可以使用以下功能:org.apache.cxf.feature.LoggingFeature
:
<jaxws:endpoint ...>
<jaxws:features>
<bean class="org.apache.cxf.feature.LoggingFeature"/>
</jaxws:features>
</jaxws:endpoint>