簡體   English   中英

Java中的Web服務

[英]Web Services in Java

在開發Java項目時,您通常使用什么來連接Web服務?

有不同的API可以完成這項工作。 從我讀過的不同書籍和教程:JAX-WS,JAXB,JAXM,JAXR,JAX-RPC,Axis等等。

我對你究竟使用的是什么以及使用了多少感興趣? 如果你願意,可以把這作為一項調查:)

要回答您的問題,我們首先需要區分您列出的工具。

JAX-WS,JAXB,JAXM,JAXR,JAX-RPC是XML和Web服務相關的API,而Axis 1和2是這些API中的零個,一個或多個的實現,具體取決於版本。

JAX-B 1和2是XML到對象綁定API,JAX-WS是一個基於WSDL和SOAP的Web服務API,是JAX-RPC的前身,JAX-M是一個較舊的XML消息傳遞API,而JAX-R是一個抽象API用於與UDDI和ebXML等注冊表進行交互。

從Java.net JAX-RPC頁面:

JAX-RPC專家組在Sun Microsystems擔任EG主管時擁有廣泛的行業參與。 初始規范(JAX-RPC 1.0)是JSR-101,於2002年6月發布。2003年10月發布了維護版本,提供了與JAXB 1.0的更好集成以及對doc / literal的更好支持。

規范的下一個版本從JAX-RPC 2.0重命名為JAX-WS 2.0,並且正在開發為JSR-224; 此版本將解決該領域的許多其他要求,並將增加JAXB和JAX-WS規范之間的協同作用。 您可以在此處訪問JAX-WS項目頁面。

自從JAX-B 1.0和JAX-RPC 1.0以來,SOAP堆已經走了很長的路,我建議遠離Axis 1.0和XFire(如果我沒記錯的話,甚至不實現JAX-RPC 1)。 有許多SOAP堆棧可以實現更新的API(JAX-WS 2.x和JAX-B 2.x)。

正如其他人所提到的,Axis 2,JAX-WS RI和CXF都是有效的選擇。 這些SOAP堆棧更加成熟,支持許多現代WS- *規范。

關於使用IDE自動生成客戶端代碼的注釋,請注意。 雖然我是分別從XSD和WSDL生成XML數據綁定代碼和JAX-WS接口的主要支持者,但我提醒您在IDE中使用內置向導來執行自動生成。 如果您在一個擁有多個開發人員的團隊中工作或計划修改生成的代碼,您應該考慮這種方法的可維護性。

如果您有多個開發人員,那么其中一個人將使用不同版本的自動生成工具,不同的IDE,或者在他們的工具中使用不同的配置。 此外,如果您從向導自動生成,則由開發人員記住,如果您將來需要重新生成代碼,他們將如何生成代碼。 如果更改XSD並且不記得上次自動生成時的配置,則生成的代碼可能與整個程序中已使用的現有代碼不一致。

如果您計划修改生成的代碼,請確保您只需要執行一次,從那時起您可以輕松地手動維護代碼或定期將重新生成的代碼與修改合並。

通過在構建過程中編寫代碼生成腳本可以避免這兩個問題。 JAX-WS和JAX-B都帶有Ant任務和/或Maven 2插件,這些插件易於在您的構建中使用。 嚴肅對待這些警告,因為我看到多個項目在需要修改5年前由離開公司的員工生成的代碼時會遇到這些問題。

我最后提醒的是,在允許工具從WSDL中自動生成Web服務接口時要小心。 JAX-WS RI WSDL2Java工具喜歡將硬編碼路徑放置在生成的接口中的WSDL中。 我認為您應該自動生成一次接口,然后刪除硬編碼的URL和QName引用,使接口適用於實現接口所代表的WSDL綁定的所有Web服務,而不僅僅是您的一個端點。 WSDL描述。

你可以使用,apache軸。 如果您提供WSDL,這將自動生成Java存根。 一旦生成了存根,就像調用普通的java類一樣。

這里的軸支持者需要精確。

在Axis 1.4於2006年4月發布之后, Axis 1.x項目在三年前被放棄了。 我們最近在Axis 1.4客戶端庫中遇到了幾個非常關鍵的線程安全漏洞,包括100%的CPU旋轉和死鎖。 這些在Axis 1.x錯誤數據庫中有詳細記錄(並且仍未解決)。 不用說,我們放棄了Axis 1.x(並且只使用原始的Apache HTTP客戶端代碼)。

Axis 2是一個全新的代碼庫......也許其他人可以評論它。

根據我們的經驗,我們會考慮使用MetroCXF手工編碼和(可能) Axis 2來實現SOAP Web服務。 (我們建議您選擇基於REST的方法而不是SOAP,並使用我們喜歡的Restlet框架)

IMO,你絕對不會選擇Axis 1.x

因為我們在Spring上投入了相當多的資金,所以我們將Spring-WS與JAXB一起使用。

我已經使用了Axis和Axis2,發現它們都非常好。

我認為最常見的用途是使用Apache Axis2。 用它創建服務非常容易,你會發現很多教程。

我已經使用了JAX-WS RIApache CXF 如果您使用的是Spring,那么CXF是一個非常好的選擇。 正如Phill所提到的,還有Spring-WS ,但CXF建立在JAX-WS規范之上。 如果您不使用Spring,那么我會說RI是要走的路,特別是因為它與Java 6捆綁在一起。

對於POX + HTTP或RESTful Web服務, Restlet或一個不錯的HTTP客戶端實現是完全足夠的。

Apache Axis為+1。

但JAX-WS也是一個不錯的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM