如何在 Spring 中查看 SOAP 请求的 XML 输出?

Nik*_*wal 3 java model-view-controller spring soap web-services

我是 Spring SOAP 请求的新手。我想查看 SOAP 请求的最终 XML 输出,其中包括 SOAP 标头和 SOAP 信封。

在调试时我到达了这段代码

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);
Run Code Online (Sandbox Code Playgroud)

我怀疑在这里我可以通过放置一些记录器在某处看到输出 XML SOAP 请求,但我不确定我是否正确。我尝试搜索它,但在谷歌上提供的所有帖子中没有任何内容是明确的。

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

小智 5

确保使用 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
Run Code Online (Sandbox Code Playgroud)