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

使用Java/Jersey作为REST和SOAP的Web服务,java,rest,soap,jersey,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

我可以拥有同时具有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接口?

基本上,
Jersey
是实现,所以这里不能有SOAP web服务。您可以使用,这是JAX-RS的实现,并且您可以在两种体系结构样式中组合您的web服务。

下面是一个将实现同时公开为rest和soap web服务的解决方案。类似于扎克在评论中的建议。 如果您已经有了上面粘贴的支持jax-rs的服务,那么您可能需要进行一些重构

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

例如

不要用jax-rs注释ejb(比如说电子服务)

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

有一个接口Y和YImpl来支持基于soap的调用。这将支持jax-ws,因此将使用jax-ws进行注释。Yimpl将引用EJB电子服务并将处理委托给它


如果您有一个web部署描述符,那么在web部署描述符中为rest和soap定义不同的servlet和映射。

我认为您应该这样做或那样做,因为它们的目的和实现非常不同。有关更多信息,请参阅和。如果您决定同时实现这两个类,那么您当然应该将它们划分为不同的类。