如何从服务器收到的soap消息中删除命名空间



我是Apache CXF的新手,我一直在处理从外部服务器接收的SOAP消息中删除命名空间的问题(我充当使用服务的客户端)

从wsdl生成的存根在@WebResult中具有不同的命名空间,而从服务器系统接收的SOAP信封则不同。我想应用一个通用的解决方案,以便从响应消息中删除命名空间,这样客户端验证就不会失败。

o.a.c.p.PhaseInterceptor Chain-的拦截器{http://www.abc.xyz/webservices/facade}服务#{http://www.abc.xyz/webservices/facade}serviceName引发异常,正在展开

org.apache.cxf.enterceptor.Fault:意外元素{http://www.abc.xyz/webservices/facade}找到serviceResponse。应为{http://www.abc.xyz/webservices/facade/xxx}serviceResponse。

请提供帮助。

迄今为止尝试的解决方案:

(CXF转换功能)

Map<String, String> inTransformMap = Collections.singletonMap("{http:// www.abc.xyz/webservices/facade/**xxx**}serviceResponse", "");
org.apache.cxf.interceptor.transform.TransformInInterceptor transformInInterceptor = new org.apache.cxf.interceptor.transform.TransformInInterceptor();
transformInInterceptor.setInTransformElements(inTransformMap);
proxy.getInInterceptors().add(transformInInterceptor);

在这种方法中,当我试图用""替换{http://www.abc.xyz/webservices/facade/**xxx**}serviceResponse时,服务器挂起,它进入org.apache.cxf.staxutils.transform.InTransformReader.handleDeepDrop()行266 的无限循环

我终于能够通过以下解决这个问题

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
Map<String, Object> props = factory.getProperties();
if (null == props) {
props = new HashMap<String, Object>();
}
props.put("soap.no.validate.parts", true);
factory.setProperties(props);

上述解决方案将允许关闭传入响应验证,因此不会出现任何异常,如org.apache.cxf.enterceptor.Fault:意外元素。

最新更新