打印SOAP消息的XML内容

时间:2010-10-19 14:28:14

标签: java web-services soap cxf

我正在使用Apache CXF作为我的webservices。我创建了一个AbstractSoapInterceptor的实例。在public void handleMessage(SoapMessage message) throws Fault方法中,我想将截获的消息的XML内容打印到控制台。我怎样才能做到这一点?

3 个答案:

答案 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>