JDK 1.8, JAX-RS 2.1, CXF и Websphere 8.5.5.10 - PullRequest
       132

JDK 1.8, JAX-RS 2.1, CXF и Websphere 8.5.5.10

0 голосов
/ 25 февраля 2020

Я использую JAX-RS 2.1 и CXF 3.2.6. Я создал приложение Hello World и развернул в Webpshere 8.5. это развернуло успешно, и когда я попытался поразить, получаю ниже исключения. не могли бы вы помочь мне решить эту проблему

ниже моя сеть. xml

<servlet>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.web.ebill.csr.appservice.ServiceApp</param-value>
    </init-param>
    <load-on-startup>-1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/service/*</url-pattern>
  </servlet-mapping>

E com.ibm.ws.webcontainer.webapp. WebApp logServletError SRVE0293E: [Ошибка сервлета] - [CXFServlet]: java .lang.NoSuchMethodError: javax / ws / rs / core / Application.getProperties () Ljava / util / Map; (загружается из файла: / C: / IBM / WebSphere / AppServer / 8.5 / plugins / javax.j2ee.jaxrs.jar от org.eclipse.osgi.internal.baseadaptor. DefaultClassLoader@a4b360dc) вызывается из класса org. apache .cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet (загружается из файла: / C: / рабочие / eblarc / .metadata / .plugins / com.genuite c .eclipse.blue.websphere.core / WebSphere_20_Application_20_Server_20_8_2e_5_20_at_20_localhost_20__28_2_29_ / CXFNoSpringDemo / CXFNoSpringDemo /WEB-INF/lib/cxf-rt-frontend-jaxrs-3.2.6.jar by com.ibm.ws.classloader. CompoundClassLoader@3d4f5352 [war: CXFNoSpringDemo.ear / CXFNoSpringDemo.war] Локальный путь к классу: C: \ рабочие области \ eblar c .metadata.plugins \ com.genuite c .eclipse.blue.websphere.core \ WebSphere_20_Application_20_Server_20_8_2e_5_20_at_20_localhost_20__28_2_29_ \ CXFNoSpringDemo \ CXFNoSpringDemo \ WEB-INF \ классы; C: \ рабочие области \ eblar c .metadata.plugins \ com.genuite c .eclipse.blue.websphere.core \ WebSphere_20_Application_20_Server_20_8_2e_5_20_at_20_localhost_20__28_2_29_ \ CXFNoSpringDemo \ CXFNoSpringDemo \ WEB-INF \ Lib \ CXF -core-3.2.6.jar; C: \ Рабочие области \ eblar c .metadata.plugins \ com.genuite c .eclipse.blue.websphere.core \ WebSphere_20_Application_20_Server_20_8_2e_5_20_at_20_localhost_20__28_2_29_ \ CXFNoSpringDemo \ CXFNoSpringDemo \ WEB-INF \ Lib \ CXF-RT-интерфейс-jaxrs-3.2.6.jar; C: \ рабочие области \ eblar c .metadata.plugins \ com.genuite c .eclipse.blue.websphere.core \ WebSphere_20_Application_20_Server_20_8_2e_5_20_at_20_localhost_20__28_2_29_ \ CXFNoSpringDemo \ CXFNoSpringDemo \ WEB-INF \ Lib \ CXF-RT-транспорты-HTTP-3.2.6.jar; C: \ рабочие области \ eblar c .metadata.plugins \ com.genuite c .eclipse.blue. websphere.core \ WebSphere_20_Application_20_Server_20_8_2e_5_20_at_20_localhost_20__28_2_29_ \ CXFNoSpringDemo \ CXFNoSpringDemo \ WEB-INF \ Lib \ javax.ws.rs-апи-2.1.1.jar; C: \ рабочие области \ eblar * 1036 .metadata.plugins * \ com.genuite c .eclipse.blue.websphere.core \ WebSphere_20_Application_20_Server_20_8_2e_5_20_at_20_localhost_20__28_2_29_ \ CXFNoSpringDemo \ CXFNoSpringDemo Parent: com.iblo.ws. : CXFNoSpringDemo.ear] Режим делегирования: PARENT_FIRST). в орг. apache .cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet.isAppResourceLifecycleASingleton (CXFNonSpringJaxrsServlet. java: 418) в орг. в организации .ibm.ws.webcontainer.servlet.ServletWrapperImpl.init (ServletWrapperImpl. java: 168) в com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper. java: 636 мкс) в com. .webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper. java: 480) по адресу com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest (ServletWrapperImpl. java: 178) на веб-сайте. .WebAppFilterChain.invokeTarget (WebAppFilterChain. java: 136) по адресу com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter (WebAppFilterChain. java: 97) по адресу com.ibm.con troller.InterceptFilter.doFilter (InterceptFilter. java: 28) по адресу com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter (FilterInstanceWrapper. java: 195) по адресу com.ibm.ws.webcontainer.filter.Wha. doFilter (WebAppFilterChain. java: 91) по адресу com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter (WebAppFilterManager. java: 967) на com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters (WebAppFilterManager. java: 1107) на com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp. * 1056). 3951) на com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup. java: 304) на com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer. java: 1014) на com.ibm. .ws.webcontainer.WSWebContainer.handleRequest (WSWebContainer. java: 1817) по адресу com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink. java: 200) по адресу com.ibm.ws.http.channel .inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink. java: 463) в com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest (HttpInboundLink. java: 530) в com.ibm. .http.channel.inbound.impl.HttpInboundLink.processRequest (HttpInboundLink. java: 316) по адресу com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready (HttpInboundLink. java: 287) по адресу .ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators (NewConnec ionInitialReadCallback. java: 214) по адресу com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete (NewConnectionInitialReadCallback. java: 113) по адресу com.ibm.ws.tcp.channel.impl.ApleReistenom (. AioReadCompletionListener. java: 175) по адресу com.ibm.io.asyn c .AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture. java: 217) по адресу com.ibm.io.asyn c .AsyncChannelFuture.fireCompleCA java: 161) на com.ibm.io.asyn c .AsyncFuture.completed (AsyncFuture. java: 138) на com.ibm.io.asyn c .ResultHandler.complete (ResultHandler. * 1075) *: 204) в com.ibm.io.asyn c .ResultHandler.runEventProcessingL oop (ResultHandler. java: 775) в com.ibm.io.asyn c .ResultHandler $ 2.run (ResultHandler. java: 905) на com.ibm.ws.util.ThreadPool $ Worker.run (ThreadPool. java: 1892)>

1 Ответ

0 голосов
/ 25 февраля 2020

Вы, кажется, пытаетесь использовать версию 2.1 JAX-RS (Apache CXF), но из-за того, как работает делегирование загрузчика классов, вы получаете API с сервера (WebSphere 8.5.5 включает JAX-RS 1.1). CXFNonSpringJaxrsServlet пытается вызвать метод API JAX-RS 2.1, который не существовал в 1.1, поэтому возникает ошибка.

Решение состоит в том, чтобы изменить загрузку классов так, чтобы классы загружались из ваших jar-файлов вместо серверных. банки. Есть два способа сделать это:

1) Измените настройки загрузчика классов вашего веб-модуля (ПРИМЕЧАНИЕ. Для этого также есть настройки на уровне приложения, но банки, о которых вы заботитесь, находятся в WAR / область видимости веб-модуля, а не EAR / приложение), установив режим делегирования загрузчика классов на «родительский последний». Это заставит загрузчик классов веб-модуля искать его локальный путь к классу, прежде чем передать нагрузку его родителям.

https://www.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/trun_classload_server.html

2) Поставьте банки сначала нужно загрузить в общую библиотеку, выбрать опцию «использовать изолированный загрузчик классов для этой общей библиотеки» и связать эту общую библиотеку с приложением или веб-модулем. Как правило, это более безопасный вариант, поскольку он ограничивает область последней родительской загрузки только теми банками, которые в нем нуждаются, хотя ваше приложение выглядит достаточно маленьким, чтобы в этом случае оно могло быть излишним. Обратите внимание, что классы в изолированной разделяемой библиотеке не могут «видеть» классы в EAR / WAR, потому что они получают собственный загрузчик классов, поэтому вы должны убедиться, что вещи в изолированной библиотеке также имеют свои зависимости.

https://www.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.base.iseries.doc/ae/ucws_rsharedlib_inst.html

...