【发布时间】:2015-04-22 21:44:52
【问题描述】:
通过 HTTP POST 请求调用 JAX-WS Webservice 的操作,我们通常会得到如下示例格式的响应:
<?xml version="1.0" encoding="UTF-8" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:helloResponse xmlns:ns2="http://test/">
<return>Hello Foo!</return>
</ns2:helloResponse>
</S:Body>
</S:Envelope>
我想删除和/或修改 服务器端的 SOAP 消息响应的 XML 声明的版本,即我想从我的 WS 的响应中删除/修改这部分:
<?xml version="1.0" encoding="UTF-8" ?>
我尝试使用 JAX-WS SOAPMessage 处理程序(请参阅下面的代码)将其删除,但它不起作用。
@Override
public boolean handleMessage(SOAPMessageContext context) {
Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if(isRequest) {
try {
final SOAPMessage message = context.getMessage();
message.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "false");
message.saveChanges();
context.setMessage(message);
} catch (SOAPException e) {
return false;
}
}
return true;
}
我做错了什么?这甚至可能吗???如果是,您对如何删除 XML 声明或修改它的版本(到 XML 1.1)有什么建议吗??
非常感谢您的帮助!
【问题讨论】:
-
等待..您在服务器或客户端处理/期望? (请尝试
if(!isRequest)!) -
@xerx593 对不起,忘了说我在服务器端处理消息
-
所以“你做错了什么?”仍然是最难的问题,“有可能吗?” - 我同意,你的方法朝着正确的方向发展! “xml 1.1” - 我不推荐,因为这个 xml 版本不存在(但..也许永远存在)
-
我遇到了同样的问题。在我的情况下,服务器(我无法更改)不接受具有 XML 声明的 SOAP 请求。