2012-06-06 103 views
3

我可以使用同時具有REST和SOAP接口的相同服務嗎? 我當前使用EJB和澤西在Java中實現REST服務:使用Java/Jersey作爲REST和SOAP工作的Web服務

import javax.ejb.EJB; 
import javax.ejb.Stateless; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 

@Stateless 
@Path("test") 
public class TestExternalService { 

    @EJB 
    private com.test.ejb.db.TestService testService; 

    @GET 
    @Path("/status") 
    @Produces("text/*") 
    public String status() { 
     return "ok"; 
    } 
} 

我怎樣才能讓我的類的變化,也能實現SOAP接口?

+0

我認爲你應該做一個或另一個,因爲他們的目的和實現是非常不同的。有關詳細信息,請參閱http://docs.oracle.com/javaee/6/tutorial/doc/gjbji.html和http://www2008.org/papers/pdf/p805-pautassoA.pdf。如果你決定實施兩者,你當然應該將它們分成不同的類別。 –

回答

3

基本上,JerseyJAX-RS實現,所以你不能在這裏有SOAP web服務。你可以採取Apache CXF,這是JAX-RSJAX-WS的實現,你將能夠結合你的web服務在這兩種架構風格。

2

這裏是一個解決方案公開作爲休息和肥皂web服務的實現。類似於評論中提到的zack。 如果您已經有上面粘貼的服務支持jax-rs,那麼您可能需要進行一些重構。

解決方案是有兩套接口和實現。一個支持jax-rs和一個jax-ws。您仍然可以在ejb中完成處理。

例,

不要註釋你的EJB(比如電子服務)與JAX-RS。

有一個接口X和Ximpl類來支持寧靜的調用。這將支持jax-rs,所以基本上用jax-rs註釋。當然,這仍然可以使用球衣。 Ximpl將引用EJB EService並將處理委託給它。

讓接口Y和YImpl支持基於soap的調用。這將支持jax-ws,所以將用jax-ws進行註釋。 Yimpl將引用EJB EService並將處理委託給它。

如果您有一個web部署描述符,請在您的web部署描述符中定義不同的servlet並映射rest和soap。