【问题标题】:Web service that works as REST and SOAP using Java/Jersey使用 Java/Jersey 作为 REST 和 SOAP 工作的 Web 服务
【发布时间】:2012-06-06 13:36:15
【问题描述】:

我能否拥有同时具有 REST 和 SOAP 接口的相同服务? 我目前有一个使用 EJB 和 Jersey 用 Ja​​va 实现的 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 接口?

【问题讨论】:

标签: java rest soap jersey


【解决方案1】:

基本上,Jersey 是JAX-RS 的实现,所以这里不能有 SOAP 网络服务。您可以采用Apache CXF,它是JAX-RS 和JAX-WS 的实现,您将能够以两种架构风格组合您的Web 服务。

【讨论】:

    【解决方案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 来支持基于soap的调用。这将支持 jax-ws,因此将使用 jax-ws 进行注释。 Yimpl 将引用 EJB EService 并将处理委托给它。

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

    【讨论】:

      猜你喜欢
      • 2011-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 2014-11-07
      相关资源
      最近更新 更多