我想將一些SOAP錯誤添加到我的JAX-WS Web服務中,但我不想更改WSDL模式的內容。據我所知,我將不得不使用annotation @WebFault來定義SOAP Fault,並在下一次構建時自動導致WSDL中的更改。有沒有辦法在不更改WSDL方案內容的情況下使用SOAP Faults?在不更改WSDL文件的情況下添加soap故障?
0
A
回答
2
當您從您的代碼中拋出異常時,它將在響應中由JAX-WS自動映射到SOAP錯誤。沒有必要在WSDL中定義錯誤。
使用@WebFault
或在WSDL文件中定義<soap:fault>
元素用於聲明特定操作可能會返回自定義SOAP錯誤。
@WebFault
肯定會在生成的WSDL中添加一個<soap:fault>
元素。
回顧一下,拋出異常會在肥皂響應中插入一個元素。
更新
定製faultstring:
,你作爲參數傳遞給Exception
構造函數的字符串消息表示在<soap:fault>
的faultstring元素。例如:在SOAP響應
throw new Exception("This is the faultstring text");
由此造成的故障:
<soap:fault>
<faultcode>soap:Server</faultcode>
<faultstring>This is the faultstring text</faultstring>
</soap:fault>
自定義的faultcode:
我不認爲你可以改變正常的Java異常在faultcode。如果您確實需要這樣做,您可以查看JAX-WS SOAPFaultException。
請記住,故障碼用於指示產生的錯誤類型,並且大多數時候您將從Web服務返回服務器故障。
這是SOAP 1.1和1.2的四個現有的故障代碼:
- VersionMismatch:發現SOAP Envelope元素的無效命名空間。
- 必須瞭解:Heading元素的直接子元素(其mustUnderstand屬性設置爲「1」)不被理解。
- 客戶端:郵件格式不正確或包含不正確的信息。
- 服務器:服務器出現問題,消息無法繼續處理。
前三打算解析SOAP請求時,除非有一個非常具體的情況,或者你正在編寫自己的JAX-WS處理程序/攔截器,你將不再需要返回任何其他要通過JAX-WS創建「服務器」以外的錯誤代碼。
定製細節:
的<detail>
元件將與表示所述異常的元素來填充。因爲如果你扔一個new MyCustomException("custom message")
例如,它會是這樣的:
<detail>
<MyCustomException>
<message>custom message</message>
</MyCustomException>
</detail>
0
使用SOAP UI測試您的Web服務。我只是在異常中使用自定義消息進行了測試,當我看到Soap Ui的響應時,我看到Fault String具有我的自定義消息。
相關問題
- 1. WSO2AM沒有故障的情況下產生SOAP信封
- 2. 在不添加配置文件的情況下提交/推送項目更改
- 3. Sharepoint:如何在不更改版本的情況下添加文件?
- 4. 如何在不更改當前工作目錄的情況下添加文件?
- 5. 在不更改源代碼的情況下添加鉤子
- 6. 如何在不更改配置的情況下添加地圖?
- 7. 在不使用更改語句的情況下添加新列
- 8. DotNetZip在不創建文件夾的情況下添加文件
- 9. 在CXF SOAP故障
- 10. SOAP PHP故障解析WSDL:無法加載外部實體?
- 11. 如何在不更改文件類型的情況下更改文件名?
- 12. 如何在沒有WSDL的情況下創建soap客戶端
- 13. 在沒有WSDL的情況下執行Saber SOAP請求
- 14. 在不暴露明文的情況下更改加密密鑰
- 15. 如何在activeMq tcp故障轉移情況下處理連接故障
- 16. 沒有出現在WSDL中的JAX-WS Soap故障
- 17. 在不更改GWT文件的情況下部署到AppEngine
- 18. 在不更改PHP格式的情況下讀寫JSON文件
- 19. 模擬故障的情況下在jQuery的POST方法
- 20. GIT在我的情況下添加回復(保持更改)
- 21. 可靠的UDP的故障情況?
- 22. 在2D 2D陣列的情況下出現Seg故障
- 23. 在不更改擴展名的情況下更改文件的結尾名稱
- 24. ADB適配器的故障情況
- 25. 簡單的AVFoundation故障排除情況
- 26. Java:如何在不修改類文件的情況下添加到基類
- 27. 在不更改版本的情況下更新受管文檔
- 28. 在這種情況下Redis是單點故障(Redis,Node.JS,Socket.IO)嗎?
- 29. highchart:在不改變系列線條的情況下添加點
- 30. 在不改變總寬度的情況下添加填充
好吧,但是如果我想更改faultcode和faultstring呢? – ctomek
我更新了答案。您可以使用java Exceptions自定義faultstring,但不能使用faultcode。 –
如果我拋出檢查的異常,那麼我必須通過添加「throws」子句來更改我的webmethod的簽名,因此我將不得不更改我的web方法的接口,以便不會在Web服務中做大的更改就拋出檢查的異常接口。正如我發現的那樣,我必須拋出未經檢查的異常。但是當我拋出RuntimeException它仍然不能按預期工作時,我拋出未經檢查的異常「拋出新的RuntimeException(」test「);」而faultstring是「內部錯誤」而不是「測試」。有任何想法嗎? – ctomek