我正在使用Apache CXF 3.0.2来展示在解组期间遇到名称空间问题的服务。当所有命名空间声明都在soapenvelope级别完成时,当我要解组消息时,它们似乎被剥离或丢失。例如,以下内容将显示为无效的xml:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:v1="http://foo.com/v1"
xmlns:v2="http://bar.com/v2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body >
<v1:foo>
<v2:bar>
</v1:foo>
</soapenv:Body>
</soapenv:Envelope>
但是,如果我将声明向下移至soapbody或xml以下,则验证正常:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body xmlns:v2="http://bar.com/v2" xmlns:v1="http://foo.com/v1">
<v1:foo>
<v2:bar>
</v1:foo>
</soapenv:Body>
</soapenv:Envelope>
我一直在尝试编写一个拦截器来操作传入的请求,并将我关心的名称空间声明从标题移动/复制到Body标签,但似乎无法操纵传入的消息以这种方式。有没有人有任何建议?
答案 0 :(得分:0)
考虑使用AbstractSoapInterceptor
扩展Apache CFX
。覆盖handleMessage()
可让您访问SOAPMessage
,然后即可对其进行操作。