我正在使用CXF生成到.NET Web服務客戶端的接口。但是,有時,當我使用的客戶端,我得到一個錯誤:配置CXF Web服務客戶端以讀取XML 1.1響應
WARNING: Interceptor for {http://xxxxxx.com}ChangeRequestWebService#{http://xxxxxx.com/ChangeRequestWebService}GetChangeRequestById has thrown exception, unwinding now
[com.ctc.wstx.exc.WstxLazyException] com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x1b
at [row,col {unknown-source}]: [76,44]
從許多其他來源網上,很明顯,這是因爲web服務編碼它在XML 1.1響應,而我的CXF客戶端讀取預期XML 1.0的響應,特殊字符0x1b在XML 1.0中是非法的。現在,我不想爭論.NET服務應該是否在其響應中使用XML 1.1,當時WSDL明顯是1.0(因爲這是規範)。我只是想能夠閱讀他們發送的內容而不會出錯。
查看CXF客戶端中的依賴關係,他們使用WoodStox 4.1.1(來自其站點)明確支持XML 1.1。 我想知道的是,有什麼方法可以配置我的CXF客戶端(通過在wsdl2java時間或運行時綁定)來在接收響應時使用XML 1.1解析器?我能找到的所有人都說他們不應該使用1.1,或者讓服務器端過濾這些字符。請注意,我無法過濾客戶端的字符,因爲我必須將數據發送回服務器,並且驗證將失敗。
作爲替代方案,我想.NET服務可能會以某種方式說明他們在響應中使用XML 1.1,但我不控制該服務,因此找出問題會更麻煩爲他們,然後建議他們修復它。另外,他們發送的數據是在數據庫中的,所以它不是Web服務的錯誤,它只有XML 1.1的字符。