2011-08-08 61 views
2

這裏就是我想要做:Java的REST客戶端:JAX-RS和自動型映射

創建一個接口(爲例):

@Path("/") 
public interface Bubbles { 

    @Get 
    @Path("blowBubble") 
    @Produces("text/plain") 
    Bubble blowBubble(); 
} 

所述接口應該被部署爲寧靜的網絡服務。在這一點上我並不特別在乎服務器端,我主要關心的是客戶端。

我所尋找的是一個圖書館,在那裏我可以:

1)實現該接口,沒有接口知道完整的URL(知道服務器和端口顯然是必要的(它在界面畢竟)

2)自動映射'泡沫'通過電線JSON。無增加JAXB它,沒有建築類型轉換器等自動

我的問題是,我已經使用了2個庫做1或者其他,但不能同時:(

的的Restlet庫做2,但不是1,CXF確實1而不是2

是否有一舉兩得

我已經提交的bug兩個和CXF開發的似乎堅持認爲2不應該是一個功能的庫 - 我不知道明白爲什麼。

提前致謝。

編輯#1:

爲了澄清我的意圖,我想用REST作爲後盾傳輸機制SOA的Java。這種運輸工具應該是透明的;如果你有一個遵循註解的服務接口,那麼客戶端和服務器就不需要知道任何關於彼此的任何信息。他們應該遵守合同。此外,這個API應該是非侵入性的;例如:我發現使用JAXB IS插入業務Objects \ Entities註釋(如果我無法修改源代碼?)。

+0

的,我不知道這是否會做,但你看過春天休息還是輕鬆休息? – chrislovecnm

+0

我今天只是在看春天,看起來並不像它完全支持兩者。我已經很輕鬆地看過,並且找不到足夠好的文檔說明任何一種方式。 – javamonkey79

+0

可能不會喜歡這個答案,但是你可能需要擴展你選擇的庫。 Rest Easy可以爲你做到這一點,如果我記得它會開箱即用的界面,但我從來沒有試過需要#2 – chrislovecnm

回答

0

我認爲我可以爲您提供的最佳答案是挑選最好,最活躍的堆棧並添加您的更改以使自己成爲所需的支持。我不認爲有一個主要的球員可以滿足你的需求。

-1

只有使用自己的註釋時,Restlet才能實現該接口(請參閱ClientResource#create)。我做了我自己的代碼來處理jax-rs註釋...

對於第二點,我不知道CXF。我們使用Restlet和Jackson實現了jax-rs公共接口(JacksonJsonProvider):MessageBodyWriter,MessageBodyReader。也許,你可以把這個課程註冊到CXF。這可能起作用,因爲傑克遜可以不註釋地工作。

+0

對,我知道如果使用Restlet特定的註釋,Restlet是接口驅動的。但是,因爲主庫不使用JAX-RS,所以你必須知道你的URL的\完整路徑 - 這違反了這個約束:「沒有接口知道完整的URL」 – javamonkey79

+0

我提到Restlet只是爲了告訴它不能回覆你遇到同樣問題後的第一個問題。 :)這就是爲什麼我說我製作了「我自己的代碼」來處理JAX-RS註釋(並且這並不複雜)。 關於CXF的第二點呢?你不能用傑克遜嗎? – Sylvain

+0

爲了使用傑克遜,您仍然需要使用JAXB註釋對象。 – javamonkey79

-1

實際上CXF做到這些,當你使用JAX-RS只標註你的方法與

@Produces("application/json") 

,你會得到JSON輸出開箱

+0

我想你錯過了一部分問題:「不自動添加JAXB,沒有構建類型轉換器等等」使用CXF,對象必須具有JAXB註釋,或者必須編寫消息轉換器。 – javamonkey79

+0

我確實想念那個:-) –