使用SOAPMessage.writeTo强制打印SOAPHeader内容

时间:2017-11-09 03:22:52

标签: java soap jax-ws wsimport

我对观察到的SOAPMessage行为感到有点困惑#writeTo - https://docs.oracle.com/javase/8/docs/api/javax/xml/soap/SOAPMessage.html#writeTo-java.io.OutputStream-

我已经构建了一个SOAPHandler来确保我所有传出的SOAP消息都有一些特定的SOAP Header。我有以下代码来抓取将要发送的输出:

ByteArrayOutputStream out = new ByteArrayOutputStream();
message.writeTo(out);
String strMsg = new String(out.toByteArray());

如果我将上述内容传递给stdout,我会看到如下消息:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><S:Body xmlns:ns2="http://blah.com/blah" xmlns:ns3="http://foo.com/foo"><ns2:myStuff>...</ns2:myStuff></S:Body></S:Envelope>

表示空标题...但如果我以编程方式查询标题对象,我可以看到内容在那里:

System.out.println(message.getSOAPHeader().getElementsByTagName("ns:MyHeader"));
System.out.println(message.getSOAPHeader().getElementsByTagName("ns:MyHeader").getLength());
System.out.println(message.getSOAPHeader().getElementsByTagName("ns:MyHeader").item(0).getFirstChild());
System.out.println(message.getSOAPHeader().getElementsByTagName("ns:MyHeader").item(0).getFirstChild().getTextContent());

打印:

com.sun.org.apache.xerces.internal.dom.DeepNodeListImpl@d2a3aad
1
[my:Id: null]
111111

从阅读doco我知道不会打印MIME标题,但我会认为SOAPHeaders没有问题吗?

0 个答案:

没有答案