Веб-сервис SOAP и REST с одной реализацией в Java EE - PullRequest
4 голосов
/ 29 июля 2011

Возможно ли (Java EE, JBoss 6) грамотно аннотировать код Java для предоставления веб-сервисов RESTful и SOAP без реализации двух методов?

Я думаю о:

@Local
@Path("/service")
@WebService
public interface SomeService {
    @GET @Path("somemethod")
    @WebMethod
    public String someMethod (@QueryParam("s") String someParam);
}

Обратите внимание и @ Path и @ WebService (приведенный выше пример не работает, к сожалению).

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Хотя аннотации JAX-WS и JAX-RS вполне могут сожительствовать на одних и тех же методах, мне трудно поверить, что любой интерфейс, хорошо настроенный для использования с JAX-RS, может хорошо подойти для JAX-WS. или наоборот . Проблема не в том, что вы не можете сделать это, проблема в том, что вы не должны; у них другая модель мира, другая концепция того, что значит быть хорошим интерфейсом.

Но если вы просто делаете что-то тривиальное, например, простой поиск, он действительно может работать:

@GET
@Path("foo/{id}")
@Produces("application/xml")
@WebMethod(operationName = "DescribeFoo")
@WebResult(name = "Description")
public DescriptionOfFoo getFooDescription(
        @PathParam("id")
        @WebParam(name = "fooId")
        String id) {
    return get_the.description_of(id); // Whatever...
}

Хотя я бы хотел использовать как можно больше интерфейсов (обратитесь к документации по фреймворку, чтобы узнать, как заставить их работать), так как это уменьшает приведенный выше частичный (!!) набор возможных аннотаций до более разумный уровень. (Для справки: когда все начинает усложняться и вы применяете несколько аспектов в нетривиальных шаблонах, вы можете легко получить более 20 аннотаций на метод, некоторые из которых относятся к вашей реализации, а некоторые - к одному или другому ваших интерфейсов; разбиение способствует здравомыслию.)

0 голосов
/ 29 июля 2011

Я ожидаю применить аннотации JAX / RS к классу, а не к интерфейсу.

Вам также может потребоваться выполнить некоторые настройки, чтобы добавить реализацию сервлета JAX / RS в ваше веб-приложение.

У меня есть более подробное объяснение здесь , оно в WebSphere, а не в JBoss, но использует реализацию с открытым исходным кодом Apache, поэтому вполне может быть уместным.

В концепции я не понимаю, почему один и тот же простой метод не может быть представлен как веб-сервис, так и сервис RESTful, однако философия проектирования двух подходов принципиально различна, когда вы переходите к чему-то нетривиальному. только не это будет мешать.

...