【问题标题】:How to see XML output of SOAP request in Spring?如何在 Spring 中查看 SOAP 请求的 XML 输出?
【发布时间】:2016-02-09 09:23:55
【问题描述】:

我是 Spring SOAP 请求的新手。我想查看包含 SOAP 标头和 SOAP 信封的 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 标头。

【问题讨论】:

    标签: java spring web-services model-view-controller soap


    【解决方案1】:

    确保使用 Commons Logging 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
    

    【讨论】:

    • 感谢您的回答,但将在其中打印此日志意味着文件名是什么...
    • 你能不能在stackoverflow里也聊一聊,这样我就可以给你解释一下了!!!!
    • 上面的log 4j配置应该写在你的log4j.properties文件中。 Apache log4j 提供 Appender 对象,这些对象主要负责将日志消息打印到不同的目的地,例如控制台、文件、套接字、NT 事件日志等。因此,这里 ConsoleAppender 将其输出写入 System.err 或 System.out,其中 System.err 为默认目标。
    • 您的记录器目标可以是控制台或任何文件。在尝试之前,您可以阅读 log4j appenders。
    【解决方案2】:

    来自 SoapEnvelopeLoggingInterceptor 的 spring 文档

    记录完整请求的特定于 SOAP 的 EndpointInterceptor 和 SoapMessage 消息的响应信封。默认情况下,请求, 记录响应和故障消息,但这种行为可以 使用 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 ..../>
    

    【讨论】:

    • 感谢您的回复。在哪里添加这段代码以及如何查看消息。我们只是在测试一个虚拟 URL。
    • 应该为 ws 端点所在的同一个容器定义这个 bean。日志消息将由记录器跟踪,因此只需添加此 bean,配置所需的属性并在主日志附加程序中跟踪消息
    • 完整的包名应该是org.springframework.ws.soap.server.endpoint.interceptor
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多