【问题标题】:SOAP namespace issue on web service with Apache CXF使用 Apache CXF 的 Web 服务上的 SOAP 命名空间问题
【发布时间】:2016-10-11 12:48:51
【问题描述】:

我正在使用 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 标签,但似乎无法在此操作传入的消息方式。有人有什么建议吗?

【问题讨论】:

    标签: java xml apache web-services soap


    【解决方案1】:

    考虑扩展AbstractSoapInterceptor,因为您使用的是Apache CFX。覆盖handleMessage() 可以让您访问您的SOAPMessage,并且可以对其进行操作。

    Apache CFX Interceptors

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 2016-02-02
      • 1970-01-01
      • 2017-01-04
      相关资源
      最近更新 更多