2017-02-04 75 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:意外的元素。