使用Java / Jersey作为REST和SOAP的Web服务

时间:2012-06-06 13:36:15

标签: java rest soap jersey

我是否可以同时使用REST和SOAP接口的服务? 我目前使用EJB和Jersey实现了使用Java实现的REST服务:

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接口?

2 个答案:

答案 0 :(得分:5)

基本上,JerseyJAX-RS实现,因此您不能在此处拥有SOAP Web服务。您可以使用Apache CXF,这是JAX-RSJAX-WS的实现,您将能够以两种架构风格组合您的网络服务。

答案 1 :(得分:2)

这是一个将实现公开为rest和soap web服务的解决方案。与zack在评论中提出的相似。 如果您已经在上面粘贴了jax-rs服务,则可能需要进行一些重构。

解决方案是拥有两组接口和实现。一个支持jax-rs和一个jax-ws。您仍然可以在ejb中完成处理。

实施例,

请勿使用jax-rs注释您的ejb(例如EService)。

有一个接口X和Ximpl类来支持restful调用。这将支持jax-rs,所以基本上用jax-rs注释。当然,这仍然可以使用球衣。 Ximpl将引用EJB EService并将处理委托给它。

有一个界面Y和YImpl来支持基于肥皂的呼叫。这将支持jax-ws,因此将使用jax-ws进行注释。 Yimpl将引用EJB EService并将处理委托给它。

如果您有Web部署描述符,请在Web部署描述符中定义不同的servlet以及rest和soap的映射。