【问题标题】:How to remove soap namespace from Envelope using Apache CXF如何使用 Apache CXF 从信封中删除肥皂命名空间
【发布时间】:2017-10-25 14:33:25
【问题描述】:

我正在尝试使用 Apache CXF 3.1 访问第 3 方 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

【问题讨论】:

    标签: soap wsdl cxf


    【解决方案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>  
    

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 2013-09-20
      相关资源
      最近更新 更多