2016-02-09 29 views
0

我是Spring SOAP请求的新手。我想查看包含SOAP头和SOAP信封的SOAP请求的最终XML输出。如何在Spring中查看SOAP请求的XML输出?

调试时我最多时达到这段代码

sendSourceAndReceiveToResult(partnerURI, source, 
    new WebServiceMessageCallback() { 

     public void doWithMessage(WebServiceMessage message) 
     throws IOException, TransformerException { 

      StringSource mefHeaderSource = new StringSource(
       header); 

      SoapHeader soapHeader = ((SoapMessage) message) 
       .getSoapHeader(); 

      Transformer transformer = TransformerFactory 
       .newInstance().newTransformer(); 

      transformer.transform(mefHeaderSource, 
       soapHeader.getResult()); 

     } 
    }, result); 

我怀疑在这里我可以看到的地方通过把一些记录器输出XML SOAP请求,但我不知道我是正确的。我试图寻找它,但在谷歌所有可用的帖子都没有清楚。

我们正在调试的问题是客户端无法在SOAP请求中看到SOAP头。

回答

0
从弹簧文档

为登录完整的请求和消息的SOAPMessage的 响应信封SoapEnvelopeLoggingInterceptor

特定SOAP-EndpointInterceptor。默认情况下,请求 响应和故障信息的记录,但这种行为是 使用logRequest,logResponse改变,logFault性能

您可以启用这个拦截器加入

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:sws="http://www.springframework.org/schema/web-services" .../> 

     <sws:interceptors> 
     <bean class="org.springframework.ws.server.endpoint.interceptor.SoapEnvelopeLoggingInterceptor"/> 
     </sws:interceptors> 

     <sws:static-wsdl ..../> 

+0

感谢您的回复。在哪里添加这段代码以及如何查看messgae。我们只是测试它的虚拟URL。 –

+0

这个bean应该为ws端点所在的同一个容器定义。日志消息将被记录器跟踪,所以只需添加此bean,在主日志appenders中配置所需的属性并跟踪消息 – hahn

+0

完整的软件包名称应为org.springframework.ws.soap.server.endpoint.interceptor –

2

请务必使用Commons Logging version 1.1或更高版本。

要登录所有服务器端的邮件,只需将org.springframework.ws.server.MessageTracing记录器级别DEBUGTRACE。 在调试级别上,仅记录净荷根元素;在TRACE级别,整个消息内容。如果您只想记录发送的消息,请使用org.springframework.ws.server.MessageTracing.sent记录器; 或org.springframework.ws.server.MessageTracing.received记录收到的消息。

在客户端,存在类似的记录器:org.springframework.ws.client.MessageTracing.sent和org.springframework.ws.client.MessageTracing.received。

以下是log4j.properties配置示例,记录了客户端发送消息的完整内容,并且仅记录了客户端收到消息的净荷根元素。在服务器端,发送和接收消息均记录了有效负载根:

log4j.rootCategory=INFO, stdout 
log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE 
log4j.logger.org.springframework.ws.client.MessageTracing.received=DEBUG 

log4j.logger.org.springframework.ws.server.MessageTracing=DEBUG 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%p [%c{3}] %m%n 
+0

感谢您的回答,但在这个日志将被打印意味着什么将是文件名... –

+0

你可以把它在这里聊天在stackoverflow,所以我可以广泛地向你解释! –

+0

上面的日志4j配置应写入您的log4j.properties文件中。 Apache log4j提供了Appender对象,它主要负责将日志消息打印到不同的目标,如控制台,文件,套接字,NT事件日志等。因此,在这里ConsoleAppender将其输出写入System.err或System.out,而System.err是默认目标。 – user