使用Apache CXF的Web服务上的SOAP命名空间问题

时间:2016-10-11 12:48:52

标签: java xml apache web-services soap

我正在使用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标签,但似乎无法操纵传入的消息以这种方式。有没有人有任何建议?

1 个答案:

答案 0 :(得分:0)

考虑使用AbstractSoapInterceptor扩展Apache CFX。覆盖handleMessage()可让您访问SOAPMessage,然后即可对其进行操作。

Apache CFX Interceptors