如何从服务器收到的 soap 消息中删除命名空间
How to remove namespace from the soap message received from server
我是 Apache CXF 的新手,我遇到了从外部服务器接收到的 SOAP 消息中删除命名空间的问题(我作为客户端使用该服务)
从 wsdl 生成的存根在 @WebResult 中具有不同的命名空间,而从服务器系统接收到的 SOAP 信封也不同。
我想应用一个通用的解决方案,以便从响应消息中删除命名空间,这样客户端验证就不会失败。
o.a.c.p.PhaseInterceptorChain - Interceptor for {http://www.abc.xyz/webservices/facade}service#{http://www.abc.xyz/webservices/facade}serviceName has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Unexpected element {http://www.abc.xyz/webservices/facade}serviceResponse found. Expected {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.interceptor.Fault:意外元素。
我是 Apache CXF 的新手,我遇到了从外部服务器接收到的 SOAP 消息中删除命名空间的问题(我作为客户端使用该服务)
从 wsdl 生成的存根在 @WebResult 中具有不同的命名空间,而从服务器系统接收到的 SOAP 信封也不同。 我想应用一个通用的解决方案,以便从响应消息中删除命名空间,这样客户端验证就不会失败。
o.a.c.p.PhaseInterceptorChain - Interceptor for {http://www.abc.xyz/webservices/facade}service#{http://www.abc.xyz/webservices/facade}serviceName has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Unexpected element {http://www.abc.xyz/webservices/facade}serviceResponse found. Expected {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.interceptor.Fault:意外元素。