我有使用 SpringWebServiceTemplate
调用 SOAP 服务的代码。
目前它使用:
public Object marshalSendAndReceive(String uri, final Object requestPayload)
但我想操纵入站和出站的内容。最合适的公共方法似乎是:
public <T> T sendAndReceive(String uriString,
WebServiceMessageCallback requestCallback,
WebServiceMessageExtractor<T> responseExtractor)
...我会为此提供一个自定义回调和提取器。
它们的接口都指定了与WebServiceMessage
.
public interface WebServiceMessage {
Source getPayloadSource();
Result getPayloadResult();
void writeTo(OutputStream outputStream) throws IOException;
}
Source
并且Result
都是来自 的接口javax.xml.transform
,并且它们似乎没有公开消息内容。两者都只有一个 setter 和 getter String systemId
,没有别的。
我可以看到 有多种实现Source
,都提供对有效负载的不同访问。我可以在我的回调中做这样的事情:
StreamSource source = (StreamSource) message.getPayloadSource();
但是强制转换很脏,无论如何,我怎么知道我应该支持哪些实现?
我怎样才能获得这些内容(最好是原始 XML)?