2010-10-19 108 views
0

我正在爲我的webservices使用Apache CXF。我創建了一個AbstractSoapInterceptor的實例。在我的public void handleMessage(SoapMessage message) throws Fault方法中,我想將攔截消息的XML內容打印到控制檯。我怎樣才能做到這一點?打印SOAP消息的XML內容

回答

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

將與CXF 3.x的這一解決方案的工作?我試了一下,getContent的調用總是返回null,但也許我做了一些其他的錯誤,或者api在3.0中改變了。 – bwfrieds 2016-02-12 17:52:26

2

任何原因,你不能只使用隨機附帶的CXF LoggingInInterceptor?你可以直接獲取代碼並以此作爲基礎,但在2.3版本中,LoggingInInterceptor已得到增強,允許指定打印流等,以便它可以「正常工作」。

1

您也可以使用此功能:org.apache.cxf.feature.LoggingFeature

<jaxws:endpoint ...> 
    <jaxws:features> 
     <bean class="org.apache.cxf.feature.LoggingFeature"/> 
    </jaxws:features> 
</jaxws:endpoint>