代码之家  ›  专栏  ›  技术社区  ›  tobiasbayer

打印SOAP消息的XML内容

  •  1
  • tobiasbayer  · 技术社区  · 14 年前

    我正在为我的Web服务使用ApacheCXF。我创建了一个 AbstractSoapInterceptor . 在其 public void handleMessage(SoapMessage message) throws Fault 方法我想将截获消息的XML内容打印到控制台。我怎样才能做到?

    3 回复  |  直到 11 年前
        1
  •  8
  •   Aaron McIver    14 年前

    检查 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;
    
          }
    }
    
        2
  •  2
  •   Stijn Geukens    12 年前

    任何原因都不能只使用 LoggingInInterceptor 那是随CXF一起提供的吗?您可以获取代码并以此为基础,但在2.3中, 日志接收程序 它被增强以允许指定一个printstream等来使用,因此它可能“只是工作”。

        3
  •  1
  •   Stijn Geukens    11 年前

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

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