5

Can I have the same service having simultaneously both REST and SOAP interfaces? I currently have a REST service implemented in Java using EJB and Jersey:

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";
    }
}

How can I make changes in my class to also implement a SOAP interface?

4

2 回答 2

7

Basically, Jersey is JAX-RS implementation, so you cannot have SOAP web-services here. You could take Apache CXF, which is implementation for both JAX-RS and JAX-WS and you would be able to combine your web-services in both architectural styles.

于 2012-06-06T14:06:19.313 回答
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 的映射。

于 2012-06-06T15:54:51.893 回答