如何使用Apache CXF从Envelope中删除soap命名空间

时间:2017-10-25 14:33:26

标签: soap wsdl cxf

我正在尝试使用Apache CXF 3.1访问第三方Web服务。当我使用wsdl2java生成的代码或curl调用服务时,服务返回一个异常,指示消息不是有效的SOAP消息。请参阅以下信息。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <connectivityTest xmlns="urn:cdc:iisb:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="connectivityTest">
      <echoBack>Hello IIS!</echoBack>
    </connectivityTest>
  </soap:Body>
</soap:Envelope>

当我删除命名空间(soap :)并使用curl调用服务时,服务正常工作。请参阅下面的工作信息。

<?xml version="1.0" encoding="utf-8"?>
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope">
  <Body>
    <connectivityTest xmlns="urn:cdc:iisb:2011" xmlns:ns2="http://www.w3.org/2003/05/soap-envelope">
      <echoBack>Hello IIS V2!</echoBack>
    </connectivityTest>
</Body>

如何在发送之前从SOAP消息的Envelope和Body元素中删除命名空间?基于搜索网络,我可能需要创建一个拦截器。如果有人可以提供一个拦截器的例子来从Envelope和Body元素中删除命名空间,那将非常感激。

提前致谢! JR

1 个答案:

答案 0 :(得分:1)

这不需要拦截器。您可以在jaxws属性中配置命名空间。

<jaxws:properties> 
  <entry key="soap.env.ns.map"> 
       <map> 
           <entry key="" value="http://schemas.xmlsoap.org/soap/envelope/"/> 
       </map> 
  </entry> 
  <entry key="disable.outputstream.optimization" value="true"/> 
</jaxws:properties>