-
背景
最近系統改造,由原來的GP庫改爲大數據查詢,於是新建一個基於大數據查詢的webService,主要依賴版本如下:
spring:3.1.2
cxf :3.1.6
hadoop:CDH6.2.0
測試環境 容器:weblogic 12.2.13
開發環境容器:tomcat 8.5.20
其它依賴jar包不在一一說明,其中Spring 和 CXF 版本都是和老的項目相同。
-
問題:
新項目在測試環境生成的soap響應報文和老項目報文命名空間存在差異,見下圖(左爲新項目在測試環境報文,又爲老項目在測試環境報文)<ns0:爲cxf 默認的命名空間 <s: 爲要求生成的標準的命名空間
鬱悶的是相同的代碼在開發環境返回的報文命名空間和老項目是相同的,cxf 報文入口和輸出配置如下
xmlInterceptor 爲報文輸出過濾器,在過濾器裏打印了響應的報文 開發環境和測試環境生成的報文命名空間還是不一致,查資料分析後應該是在測試服務器上配置中jaxws:properties 標籤中的配置沒有生效(entry 標籤可以修改命名空間爲自己想要的名字)
-
解決
網上查資料發現有個外國哥們也遇到了差不多相同的問題 地址:http://cxf.547215.n5.nabble.com/How-to-customize-namespaces-position-and-prefix-in-CXF-response-td3423069.html
看到他的問題應該是容器的解析xml的jar包版本太低,查看猜測是項目weblogic.xml配置文件中配置的優先 加載項目的jar包的配置沒有生效,所以從新配置weblogic.xml優先加載項目jar包 從新啓動發佈服務用soapUI驗證報文中命名空間已改爲自己項目中配置的了。