我正在開發一個簡單的Web應用程序,這個應用程序在TomEE 1.7.4以上提供和使用REST服務,即包含Jax-RS的版本等等。TomEE下的REST客戶端庫
我的軟件提供的服務處理沒有問題。但是,這個TomEE版本似乎沒有帶來Jax-RS客戶端,所以需要添加一些客戶端。
由於大多數人推薦新澤西州的JAX-RS客戶端,我第一次嘗試球衣,但遇到了不少嚴重錯誤。底線似乎是Jersey 2使用Java EE 7,而TomEE仍然是Java EE 6.雖然舊版的Jersey 1.x版本可能是Java EE 6,但Jax-RS客戶端似乎只有可用作爲澤西島2的一部分。因此:
問題1:是否有澤西客戶端版本在Tomee 1.7.4上運行,如果是,哪個是Maven/Gradle指針來獲取它?
在下一步中,我觀察到TomEE已經帶來的Apache CXF 2.6.16用它,但不是CXF客戶端。所以我嘗試了幾個CXF客戶端版本。添加以下到我的工作gradle.config。
providedCompile 'org.apache.cxf:cxf-rt-frontend-jaxrs:2.6.16'
providedCompile 'org.apache.cxf:cxf-rt-ws-policy:2.6.16'
(只輸入的第一行缺少策略類結束了,所以我不得不添加第二行不要問我爲什麼搖籃依賴邏輯沒有自己認識和解決這種依賴關係)。這種方法很有效,但2.6.16已經很久了,而CXF客戶端2.x的API遠遠不能令人滿意。尤其是,似乎不可能在一次調用中獲得GET請求的狀態和成功的內容。在設置WebClient
之後,我可以調用getStatus
,這會產生一個int的HTTP響應狀態,或者get(String.class)
,這會產生一個字符串(或別的東西)的有效負載,但不是兩者。這個API異常已經在CXF 3.x中得到了解決,但是這個版本再次不適合TomEE。
另一種方法是讓該呼叫爲javax.ws.rs.core.Response
的結果和掃描緩衝讀者自己。但在2016年,這應該不再是必要的了。出於同樣的原因,我不考慮裸體HttpResponse
。
問題2 CXF 2.x是否有辦法在一次調用中獲取HTTP響應代碼和實際GET結果,而無需訴諸處理原始傳入數據流?
我搜索周圍幾天一個妥善的解決辦法,我主要是困惑,因爲沒有其他人似乎也有這個問題。可能我錯過了一些非常基本的東西。因此:
問題3:是否有更適合在TomEE下實現REST客戶端的軟件包? (我知道,這類型的問題,這裏不歡迎你。但請注意,我不要求徵求意見,但對於具體的行之有效的解決方案,在最好的情況下只是一個Maven的/搖籃指針。)
我知道CXF客戶端。但是對於TomEE,只有CXF 2.6似乎正在運行,它具有https://cxf.apache.org/javadoc/latest-2.7.x/中描述的API。這不提供readEntity(),這會導致我的代碼中描述的繁瑣。 – TAM
解決方法是使用類似https://rmannibucau.wordpress.com/2013/09/26/jaxrs-1-and-unmarshalling-of-response-getentity/(注意:cxf提供了這樣的實現,現實生活中的impl可以希望根據http狀態切換課程) –