使用的wsimport爲什麼JAX-WS客戶端在運行時訪問WSDL?
wsimport -keep WebService.wsdl
不JAX-WS有什麼理由再在運行時的WSDL位置生成JAX-WS客戶端後?
這是一個錯誤?
我發現這個偉大的職位: JAX-WS client : what's the correct path to access the local WSDL?
,但它並沒有說爲什麼我們需要的WSDL在運行時
使用的wsimport爲什麼JAX-WS客戶端在運行時訪問WSDL?
wsimport -keep WebService.wsdl
不JAX-WS有什麼理由再在運行時的WSDL位置生成JAX-WS客戶端後?
這是一個錯誤?
我發現這個偉大的職位: JAX-WS client : what's the correct path to access the local WSDL?
,但它並沒有說爲什麼我們需要的WSDL在運行時
這是一個錯誤?
不,這不是一個錯誤,但從概念的角度來看是合理的。
JAX-WS在運行時必須查找wsdl位置的原因是什麼?
在構建時,您這意味着你需要知道什麼樣的業務的服務支持和WSDL生成類的消息具有什麼樣的結構(又名portTypes
,types
,messages
)。
在運行時,會有很多不同的信息發揮作用。例如,服務運行的實際地址可能已更改。 bindings
變得相關:消息應該以SOAP 1.1還是1.2發送,還是兩種格式都可以?此外,各種政策(安全性,可靠信息等)都可能附加到服務上。所有這些都是動態的,而且在構建時大多不相關。理想情況下,您應該能夠將您的客戶指向使用相同結構的其他服務,並且應該可以開箱即用。
我想回答另一個問題,我想你可能有:
這不是在案件總開銷那裏只是一個服務,它永遠不會改變?
是的。如果某個特定的WSDL具有單一服務,並且這種服務從不會從構建時狀態發生變化,那麼在運行時重新加載WSDL是不必要的,並且會浪費資源。但是,如果JAX-WS不允許更復雜的情況,例如綁定或策略等信息發生變化,或者服務的端點不止一個,那麼JAX-WS將會做出糟糕的工作。儘管如此,大多數JAX-WS實現都允許某些機制在本地存儲WSDL,並且不會在運行時將其加載到調用中。在RI中,只需將中的wsdlLocation
指向類路徑中的文件即可。