Как инициализировать Джерси с конкретным экземпляром ресурса с конкретными MessgeBodyReaders / Writers? - PullRequest
1 голос
/ 26 мая 2009

Я пытаюсь запустить Джерси с предварительно настроенным портом / URL-адресом с предварительно настроенным экземпляром ресурса. Я не могу понять, как правильно это сделать.

Вот фрагмент кода. Помогите, пожалуйста, заполнить пробелы:

@Component
@PerRequest
@Path("/svc")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public class MyService
{
    // This piece is known
}

public class JSONMessageBodyWriter implements MessageBodyWriter<Object>
{
    // This piece is known
}

public class XMLMessageBodyWriter implements MessageBodyWriter<Object>
{
    // This piece is known
}

// This is where I need help
MyService service = new MyService();
...
HttpHandler handler = ???
...
HttpServer server = ???
server.createContext("/services", handler);
...
server.start();

В приведенном выше фрагменте я пытаюсь открыть MyService с помощью URL-адреса http://localhost:8080/services/svc. Если JSONMessageBodyWriter и XMLMessageBodyWriter будут подключены - служба будет работать с XML и JSON соответственно.

Если вы знаете, как это сделать на Пристани или Гризли, дайте мне знать тоже. Может ли здесь помочь Spring?

1 Ответ

2 голосов
/ 12 июня 2009

Джерси сам предоставляет полный набор примеров , и, в частности, самый простой пример helloworld показывает, как запустить сервер на порту, чтобы либо просто запустить его, либо выполнить тестирование в JUnits. Если вы посмотрите на это, вы получите пример того, как настроить и запустить сервер.

Теперь, сконфигурировав MessageBodyReaders и MessageBodyWriters как часть приложения jersey, вы обнаружите, что это покрывается самой спецификацией JAX-RS (которую реализует jersey). Прежде всего, вашему читателю и писателю нужна аннотация @Provider. Кроме того, читатель должен получить аннотацию @Consumes, а писатель должен получить аннотацию @Produces, чтобы вы могли указать, какие типы mime они потребляют и производят соответственно.

Далее их активировать. Приведенный выше пример helloworld не показывает этого, потому что он не использует пользовательских читателей или писателей (другой пример, я не посмотрел). Таким образом, вместо предоставления пакета для поиска ресурсов (как они делают; вы поймете, о чем я говорю, когда увидите пример helloworld), вы закодируете подкласс Application, в котором вы укажете свой класс ресурсов и устройство чтения / записи. классы. С помощью программы чтения и записи у вас есть возможность указать либо класс (который вы возвращаете из getClasses), либо предоставить уже созданный экземпляр самостоятельно (который вы возвращаете из getSingletons).

Наконец, укажите имя вашего подкласса Application в качестве значения параметра init "javax.ws.rs.Application". Init-params может быть передан GrizzlyWebContainerFactory.create (опять же, вы увидите, что это использовалось в примере) при запуске сервера.

Надеюсь, это поможет.

...