2016-12-30 5 views
0

бегаю следующий простой пример для приложения Джерси на сервере Grizzly:разница между управлением в IntelliJ и работает с JAR-файла

@Path("example") 
public class example { 
    @POST 
    public Response someMethod(@Context Request r) { 
     System.out.println("Received request at : " + LocalDateTime.now()); 
     Response response = Response.ok().build(); 
     return response; 
    } 
} 


public class GrizzlyServerMain { 

    public static HttpServer startServer(String BASE_URI) throws IOException { 

     // Scans for JAX-RS resources and providers in the specified code-package 
     final ResourceConfig resourceConfig = new PackagesResourceConfig("Application"); 

     // create and start a new instance of grizzly http server exposing the Jersey application at BASE_URI 
     return GrizzlyServerFactory.createHttpServer(BASE_URI, resourceConfig); 
    } 

    public static void main(String[] args) throws IOException { 
     String BASE_URI = "http://0.0.0.0:8000"; 

     // Base URI the Grizzly HTTP server will listen on 
     startServer(BASE_URI); 

     //noinspection ResultOfMethodCallIgnored 
     System.in.read(); 
    } 
} 

Когда я запускаю его из IntelliJ, все работает, как ожидалось.

Подключен к целевой VM, адрес: '127.0.0.1:61163', транспорт: 'гнездо' 30 декабря, 2016 4:00:07 PM com.sun.jersey.api.core.PackagesResourceConfig init INFO: Сканирование для корневых ресурсов и классов поставщиков в пакетах: Приложение Dec 30, 2016 4:00:08 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO: найдены классы ресурсов root: класс Приложение . Класс приветствия Application.example 30 декабря 2016 г. 4:00:08 PM com.sun.jersey.api.core.ScanningResourceConfig init INFO: Нет найдены классы поставщиков. 30 декабря 2016 г. 16:00:08 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate INFO: Инициирование заявки на Джерси, версия 'Джерси: 1.19.3 24.10.2006 15:43 " 30 декабря 2016 г. 4:00:08 PM org.glassfish.grizzly.http.server.NetworkListener начало INFO: начато прослушиватель, связанный с [0.0.0.0:8000] 30 декабря 2016 г. 4:00:08 org. glassfish.grizzly.http.server.HttpServer start INFO: [HttpServer] Начато Полученный запрос: 2016-12-30T16: 00: 13.097 Полученный запрос: 2016-12-30T16: 00: 14.319 Полученный запрос по адресу: 2016-12-30T16: 00: 15.583 Отключено от целевой виртуальной машины, адрес: '127.0.0.1:61163', transport: 'so cket»

Но когда я создаю файл JAR со всеми зависимостями, и как только я отправить запрос от клиента, я получаю:

ВНИМАНИЕ: Исключение при выполнении FilterChain java.lang .IllegalStateException at org.glassfish.grizzly.http.server.io.OutputBuffer.reset (OutputBuffer.java:217) at org.glassfish.grizzly.http.server.Response.reset (Response.java:732) at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead (HttpServerFilter.java:168) at org.glassfish.grizzly.filter chain.ExecutorResolver $ 9.execute (ExecutorResolver.java:119) в org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter (DefaultFilterChain.java:265) в org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart (DefaultFilterChain.java : 200) на org.glassfish.grizzly.filterchain.DefaultFilterChain.execute (DefaultFilterChain.java:134) на org.glassfish.grizzly.filterchain.DefaultFilterChain.process (DefaultFilterChain.java:112) в org.glassfish.grizzly .ProcessorExecutor.execute (ProcessorExecutor.java:78) at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent (TCPNIOTransport.java:815) at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent (AbstractIOStrategy.java : 112) at org.glassfi sh.grizzly.strategies.WorkerThreadIOStrategy.run0 (WorkerThreadIOStrategy.java:115) в org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100 (WorkerThreadIOStrategy.java:55) в org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable .run (WorkerThreadIOStrategy.java:135) at org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork (AbstractThreadPool.java:567) at org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run (AbstractThreadPool.java:547) на java.lang.Thread.run (Unknown Source)

Можете ли вы сказать мне, что я могу делать неправильно?

+0

Ваше приложение отображается зависит от Glassfish сервера. Ваша банка не включает сервер. Я не знаю, как, или даже если вы захотите, сделать это. –

+0

@ChristopherSchneider Я бы не подумал, когда вы выбираете «Build Artifacts» в IntelliJ, он ставит все, что нужно коду в файле JAR. Как вы пришли, чтобы конкретно проверить эту проблему? Кажется, я не вижу подсказки в сообщении об исключении. PS, я думаю, что вижу Grizzly в файле JAR (study_jersey.jar \ org \ glassfish \ grizzly - ZIP-архив, распакованный размер 9992,959 байт) –

+0

'java.lang.IllegalStateException at org.glassfish.grizzly'. Вы сказали, что пытаетесь создать отдельную банку, и я видел звонки в Glassfish, сервер. –

ответ

1

Исключение, похоже, изменилось с IllegalStateException на исключение IllegalArgumentException.

Посмотрите на Java Doc для ContainerProvider.   ContainerProvider - это класс SPI, и его реализация будет предоставляться сервером, который вы используете, в вашем случае сервером Grizzly. В соответствии с Java Doc:
Реализация (поставщик услуг) идентифицирует себя, помещая файл конфигурации поставщика (если он еще не присутствует), «com.sun.jersey.spi.container.ContainerProvider» в ресурсе каталог META-INF/services, включая полнофункциональный класс-поставщик-поставщик реализации в файле..

Итак, я думаю, вам нужно обновить «META-INF/services» в вашей банке и добавить поставщика как «GrizzlyContainerProvider» (с учетом пакета).

Вы можете посмотреть на аналогичной должности: Grizzly and Jersey standalone jar

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