namespace對axis解析xml請求的影響
發生在我身上的實際故事,最後發現和axis解析xml時的處理機制有關,namespace的有無會影響xml解析的方式,簡單的說就是有namespace按照元素名解析,沒有namespace則按照index下標的順序來解析。
中間驚險,一一道來,做技術的不容易啊。
這個市公司的一個大專案,使用web service,我負責伺服器端的開發,其他廠商開發客戶端。好說,axis上,幾個月下來,設計/開發/測試一路ok,就進移動研究院準備最後的入網測試了。
和我們一起聯合測試的cx公司,報告說發現錯誤,經查詢是伺服器端解析他們發過來的請求失敗,出現異常java.lang.NumberFormatException。非常鬱悶,按說不大可能,程式碼是從wsdl檔案自動生成的,怎麼可能出這種低階錯誤,而且我們自己反覆測試都透過。於是想辦法抓包,發現他們的報文如下:
格式怪怪的,對照標準的報文:
發現他們的請求多了一個
有些奇怪axis怎麼會這樣解析xml,當時忙也無暇細想。繼續測試中又發現另外一個介面出現問題,cx公司的soap請求的xml欄位順序和wsdl檔案規定的順序不一致,造成資料解析出來內容錯亂。暈倒,細問才知道cx公司不是按照wsdl來自動生成程式碼,也不依照wsdl檔案的格式要求,而是很奇怪的以協議附件中的soap請求示例為基準(很荒謬的事情,這還是電信級別的軟體開發方式,想不通)。偏偏協議在一個介面上wsdl和示例的順序不一致,造成這個問題。
之後就是非技術的扯皮了,總之cx公司堅持他們的正確性和合理性,非逼我們公司修改伺服器端做法。細的不說了,俺們技術人員不懂也不該去關注,黑暗的內幕。由於那個協議的內容是俺修改的(前人離職了),這個出問題的地方就是我陸續修訂的,於是責任就壓到我身上了,當時那個鬱悶啊。寫了封郵件準備給領導,將事情說清楚,認錯並承認是俺的責任......慘就一個字。就在郵件發出去之後,突然想到,恩,怎麼老是按照index解析呢,axis沒有這麼笨吧?用測試指令碼又測試了一下,沒有問題,再看soap 報文,驚奇的發現順序也是有差異的,但是怎麼伺服器端就能正確解析呢?
靈光一動,想起cx的報文格式來了,他們的格式非常的不規範,簡直就粗糙到極點了,當時我們幾個研發還說笑,說他們肯定是手工拼湊文字,將soap/web service退化為http + xml,然後再將xml退化為文字。難道是格式的問題?對照了一下,發現少了這裡的namespace,試著將cx的報文加上這個namespace,然後用指令碼工具提交測試,伺服器端解析ok" target="_blank" rel="nofollow">">這裡的namespace,試著將cx的報文加上這個namespace,然後用指令碼工具提交測試,伺服器端解析ok。
這下問題明朗了,可以發現是這樣的規律,axis在解析時發現沒有namespace,就按照順序來解析:
wsdl標準順序 實際報文順序 最終解析出來內容
於是長出一口氣,又趕緊寫了封新郵件,解釋清楚終於將責任踢給cx了.真是驚險。平時哪裡會遇到這樣格式不規範的報文,這次長見識了.cx終於不再堅持了,增加了namespace後測試透過,最後趕在移動的時間期限前完成了測試,大家不用互相推責任了。
亂來害死人
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3349/viewspace-2807501/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Nest 中處理 XML 型別的請求與響應XML型別
- 關於兩次http請求,後一次請求影響前一次請求的問題HTTP
- SAP UI5 batch 請求的響應解析流程分析UIBAT
- .net core 拋異常對效能影響的求證之路
- Wireshark的HTTP請求包和響應包如何對應HTTP
- HTTP的請求與響應HTTP
- 解析機器人轉型對智慧化的影響力機器人
- Golang 迴圈異常丟擲不影響整個請求Golang
- 深度解析Spring AI:請求與響應機制的核心邏輯SpringAI
- DRF對Django請求響應做了技術升級Django
- ThinkPHP 請求與響應PHP
- HTTP 請求與響應HTTP
- Http請求與響應HTTP
- .net core 雜記:WebAPI的XML請求和響應WebAPIXML
- Django REST framework的請求與響應DjangoRESTFramework
- SpringMVC請求引數解析SpringMVC
- DRF之請求與響應
- SpringMVC 入門、請求、響應SpringMVC
- Go如何響應http請求?GoHTTP
- Spring MVC能響應HTTP請求的原因?SpringMVCHTTP
- 語言對思維的影響
- Nologging對恢復的影響(一)
- unusable index對DML/QUERY的影響Index
- Nologging對恢復的影響(二)
- Axios 非同步請求用法解析iOS非同步
- request和response——請求響應物件物件
- HTTP請求與響應簡析HTTP
- HTTP請求頭與響應頭HTTP
- 網線的分類與對網速的影響 網線對網速影響大嗎?
- MIME.json 檔案請求 字尾/響應型別 對照表JSON型別
- 浮動的盒子對img的影響
- SAP UI5 應用的 OData 後設資料請求響應的解析原理分析UI
- 影響域名解析生效的原因有哪些?
- 4.爬蟲 requests庫講解 GET請求 POST請求 響應爬蟲
- Spring系列 SpringMVC的請求與資料響應SpringMVC
- http請求頭與響應頭的應用HTTP
- 【PHP】一次請求過程的解析PHP
- Spring Boot中如何擴充套件XML請求和響應的支援Spring Boot套件XML