2017-02-04 80 views
0

我对Apache CXF非常新,我坚持从外部服务器收到的SOAP消息中删除命名空间的问题(我充当客户端用于消费该服务)如何删除从服务器收到的soap消息中的命名空间

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

o.a.c.p.PhaseInterceptorChain - 拦截器{} http://www.abc.xyz/webservices/facade服务#{} http://www.abc.xyz/webservices/facade已服务名抛出的异常,现在平仓

org.apache.cxf.interceptor.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()line 266

+0

欢迎来到Stack Overflow!我们是一个问答网站,而不是一个打码人员的服务。请解释你到目前为止尝试过的以及为什么它没有奏效。请参阅:[为什么“有人可以帮助我?”不是一个实际的问题?](http://meta.stackoverflow.com/q/284236) –

回答

0

我终于可以通过以下方式解决此问题

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.interceptor.Fault:意外的元素。