java.lang.ClassNotFoundException: org.eclipse.jetty.server.Request при запуске с помощью jetty:run-forked и подключении с помощью ssl

Я использую pushbuilder от Jetty для отправки некоторых ресурсов. Поскольку эти ресурсы указываются внутри веб-приложения, я не могу использовать pushCacheFilter по умолчанию для причала.

Когда я запускаю причал, встроенный в мой основной java-класс, он работает хорошо, я могу подключиться к своей странице с помощью https, а также отлично работает push.

Но когда я запускаю через jetty:run-forked, он запускается и выдает такой результат:

**Started ServerConnector@45b4c3a9{SSL,[http/1.1, ssl, alpn, h2]}{0.0.0.0:8443}**

И затем при доступе к странице я получаю эту ошибку:

**java.lang.ClassNotFoundException: org.eclipse.jetty.server.Request
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:586)**
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.basex.http2.HTTP2Settings.push(HTTP2Settings.java:60)
at org.basex.http.HTTPConnection.initResponse(HTTPConnection.java:127)
at org.basex.http.restxq.RestXqResponse.serialize(RestXqResponse.java:209)
at org.basex.http.restxq.RestXqResponse.serialize(RestXqResponse.java:195)
at org.basex.http.restxq.RestXqResponse.create(RestXqResponse.java:97)
at org.basex.http.restxq.RestXqModule.process(RestXqModule.java:104)
at org.basex.http.restxq.RestXqFunction.process(RestXqFunction.java:109)
at org.basex.http.restxq.RestXqServlet.run(RestXqServlet.java:49)
at org.basex.http.BaseXServlet.service(BaseXServlet.java:59)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:833)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650)
at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:206)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:564)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:317)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:251)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:289)
at org.eclipse.jetty.io.ssl.SslConnection$3.succeeded(SslConnection.java:149)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:110)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
at org.eclipse.jetty.util.thread.Invocable.invokePreferred(Invocable.java:128)
at org.eclipse.jetty.util.thread.Invocable$InvocableExecutor.invoke(Invocable.java:222)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:294)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:199)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:673)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:591)
at java.lang.Thread.run(Thread.java:748)

Может быть, это что-то. с загрузкой классов maven?

Изменить

Возникает еще одна ошибка: некоторые из моих последних изменений кода, похоже, отсутствуют после сборки maven. Я пытался просто запустить «maven clean», но поля все еще отсутствуют, и возникает исключение.

Эти поля также обнаруживаются при запуске встроенного причала.

Большое спасибо!


person Bodo Wissemann    schedule 12.10.2017    source источник


Ответы (1)


Прочитав снова документы причала, я нашел причину:

серверные классы скрыты от веб-приложения, если причал является контейнером сервлетов. Так что это была моя вина, исключение должно было быть выброшено! (см. документы здесь: http://www.eclipse.org/jetty/documentation/9.4.x/jetty-classloading.html)

Я думаю, что другие исключения с отсутствующими полями были связаны с этим «запрещенным» импортом.

Итак, я думаю, что моя проблема в другом:

Как может быть реализован serverPush (специфический для причала), если он не уверен, что мое веб-приложение развернуто в причале??

Собственное решение Jetty (pushCacheFilter.java) не соответствует моим потребностям. Так что я думаю, мне нужно проверить, могу ли я написать фильтр, который работает в тот момент, когда пристань отправляет ответ.

person Bodo Wissemann    schedule 16.10.2017