修改 SOAP 信封以包含名称空间
Modify SOAP envelop to include Namespace
我有类似这样的 SOAP 响应
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope
xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
<soapenv:Body>
<calculate_response>
<tid>33433</tid>
<status>0</status>
<reason>0</reason>
</calculate_response>
</soapenv:Body>
</soapenv:Envelope>
我需要给它添加命名空间,它应该看起来像这样
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
xmlns:def="http://com.sample.xyz/Messages">
<soapenv:Body>
<def:calculate_response>
<tid>33433</tid>
<status>0</status>
<reason>0</reason>
</def:calculate_response>
</soapenv:Body>
</soapenv:Envelope>
我已经使用 wsimport
创建了存根,我需要在进一步处理之前修改此响应。
实际上,据我了解,这是一个两步过程,第一步是将名称空间添加到 soap 信封,然后为其添加前缀。
关于前缀部分,我找到了 this 。我不清楚第一步该怎么做。
注意:我需要在客户端修改响应,我不能在服务器端更改 SOAP。
我在 SOAP Message Handlers
的帮助下实现了这一点
我写了 handler
它实现了 SOAPHandler<SOAPMessageContext>
并且 overridden
它的 handleMessage(SOAPMessageContext context){}
具有以下实现。
//Get soapElement from your soap request.
if (soapElement.getTagName().equalsIgnoreCase("calculate_response")) {
soapElement.setElementQName(
new QName("http://com.sample.xyz/Messages",
"calculate_response",
"def"));
我有类似这样的 SOAP 响应
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope
xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
<soapenv:Body>
<calculate_response>
<tid>33433</tid>
<status>0</status>
<reason>0</reason>
</calculate_response>
</soapenv:Body>
</soapenv:Envelope>
我需要给它添加命名空间,它应该看起来像这样
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
xmlns:def="http://com.sample.xyz/Messages">
<soapenv:Body>
<def:calculate_response>
<tid>33433</tid>
<status>0</status>
<reason>0</reason>
</def:calculate_response>
</soapenv:Body>
</soapenv:Envelope>
我已经使用 wsimport
创建了存根,我需要在进一步处理之前修改此响应。
实际上,据我了解,这是一个两步过程,第一步是将名称空间添加到 soap 信封,然后为其添加前缀。 关于前缀部分,我找到了 this 。我不清楚第一步该怎么做。
注意:我需要在客户端修改响应,我不能在服务器端更改 SOAP。
我在 SOAP Message Handlers
我写了 handler
它实现了 SOAPHandler<SOAPMessageContext>
并且 overridden
它的 handleMessage(SOAPMessageContext context){}
具有以下实现。
//Get soapElement from your soap request.
if (soapElement.getTagName().equalsIgnoreCase("calculate_response")) {
soapElement.setElementQName(
new QName("http://com.sample.xyz/Messages",
"calculate_response",
"def"));