2015-10-24 2 views
1

Чтобы создать новый экземпляр HttpServer с RESTful услуг, код выглядит следующим образом:Как зарегистрировать JAX-RS в существующем Grizzly HttpServer?

ResourceConfig resourceConfig = new ResourceConfig(
    RestPingService.class 
); 
HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(
    URI.create("http://example.com:80/rest"), 
    resourceConfig, 
    false 
); 

Однако это requries, что я в силе создания сервера. Мне также может быть предоставлен существующий экземпляр, где другие сервлеты/транспорты/независимо от того, что уже зарегистрировано, и когда я должен добавить мой.

Я искал способ вставить в ResourceConfig позже, но не смог найти его.

В этом вопросе Grizzly Embedded Server + Jersey service + Servlet filter один проходит через сервлет. Это единственный способ? Это медленнее? И как можно настроить транспорт (хост, порт), если он будет отличаться для служб REST?

Для веб-служб SOAP (JAX-WS) код является прямым; для каждого экземпляра службы регистрация идет как этого

HttpHandler jaxwsHandler = new JaxwsHandler(soapWebService); 
httpServer.getServerConfiguration().addHttpHandler(jaxwsHandler, 
      //see https://java.net/projects/grizzly/lists/users/archive/2014-11/message/7 for why this is done. 
      HttpHandlerRegistration.bulder() 
        .contextPath(path) 
        .urlPattern("") 
        .build()); 

И если NetworkListener (хост, порт) является новым, то зарегистрировать, что когда-то:

httpServer.addListener(networkListener); 

Я надеялся, что синтаксис и логика были бы подобны. Там JaxwsHandler, но нет класса JaxrsHandler. В конце концов, они похожи, обе веб-службы, обслуживаемые через HTTP.

ответ

1

Если у вас есть ResourceConfig - вы можете создать Grizzly HttpHandler из него:

HttpHandler httpHandler = new GrizzlyHttpContainerProvider() 
           .createContainer(HttpHandler.class, resourceConfig); 

и зарегистрироваться на HttpServer как нормальный Grizzly HttpHandler

+0

org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer имеет нет публичного конструктора. И 2 конструктора принимают приложение, а не ResourceConfig. Есть ли другой в другой пакет? –

+0

Итак, вопрос: как создать HttpHandler для данного ResourceConfig? –

+0

только что обновил ответ – alexey

Смежные вопросы