我正在尝试使用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
答案 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>