WAS v8.0.0.x wykorzystuje własną zmodyfikowaną wersję Wink v1.1 inkubację. Jeśli przejdziesz do {WAS_HOME}/wtyczek, zobaczysz .jar o nazwie com.ibm.ws.jaxrs.jar. Jeśli przejrzysz MANIFEST w obrębie tego artefaktu, zobaczysz, że zmodyfikowany przez IBM Wink v1.1-inkubuje i tworzy swój własny wer. 1.1.1. Będziesz chciał użyć tej wersji, ponieważ zawiera ona serwer-wink-jcdi. W przeciwnym razie nie możesz wstrzyknąć EJB do swoich zasobów Wink, co stwarza wiele irytujących problemów. Generalnie nie lubię kłaniać się do rozwiązania specyficznego dla dostawcy, ale w tym przypadku będziesz chciał użyć implementacji Wink firmy IBM. Połączyłem serwer wink-jcdi z v1.2-incubating do v1.1-incubating z tymczasowym sukcesem (uzyskałem funkcję jcdi do działania, ale potem, bez ustalonej przyczyny głównej, straciłem kilka późniejszych wdrożeń). Więc zaoszczędź sobie mnóstwo frustracji i użyj implementacji Wink IMB. Implementacja Wink firmy IBM będzie dostępna dla aplikacji za pośrednictwem artefaktu związanego z OSGi, niezależnie od tego, czy ustawisz politykę klasy ładujących na PARENT_FIRST, czy PARENT_LAST. Podejrzewam, że to błąd. Będziesz także musiał dołączyć artefakt com.ibm.ws.prereq.jaxrs.jar do swojego projektu.
W web.xml, użyj następującej konfiguracji:
<!-- Wink Servlet -->
<servlet>
<description>JAX-RS Tools Generated - Do not modify</description>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.company.webservices.config.WinkApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<enabled>true</enabled>
<async-supported>false</async-supported>
</servlet>
<!-- Wink Servlet Mapping -->
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
Według IBM's own WAS v8.0 video on JAX-RS Twoja podklasa Zastosowanie dostanie automatycznie rozpoznawany przez rozszerzenie klasy aplikacji i adnotacji ApplicationPath. Nie o to chodzi. Musisz określić swoją podklasę aplikacji w pliku web.xml. Jednak zauważysz, że konsola poinformuje cię, że użyto domyślnej aplikacji Wink. To nieprawda. Twoja klasa zostanie pobrana i będziesz musiał zastąpić metodę getClasses i zarejestrować swoich Dostawców, Zasoby itp. To zachowanie zostało zaobserwowane i dokładnie przetestowane jak na WAS v8.0.0.8.
Możesz wypróbować CXF w WAS 8 jako alternatywę.
Podobnie jak Geronimo i TomEE, WAS jest zbudowany na produktach Apache. Mogę się mylić, ale ostatnio pamiętam, WAS v8.0 używa Apache OpenWebBeans v1.0, Apache BVal v1.0, Apache OpenJPA v2.1.2-SNAPSHOT. Nie jestem pewien co do JAXB, ale myślę, że używają one własnej struktury json4j. Używam MOXy z zaskakująco dużym sukcesem.
Dzięki. Widać wszystkie wersje z 'unzip -p /opt/IBM/WebSphere/AppServer/plugins/com.ibm.ws.prereq.jaxrs.jar META-INF/MANIFEST.MF' – DarVar
Użyłem CXF od 2017 na WAS 8 i zadziałało (bo napisałeś: "Możesz wypróbować CXF w WAS 8, ale najprawdopodobniej napotkasz problemy."_) Ale bardzo pouczające publikowanie – aliopi
@aliopi - Dzięki. Dobrze wiedzieć Wydaje mi się, że wpadłem na problemy z klasą, kiedy próbowałem użyć CXF do aplikacji internetowej na WAS 8 lat temu, ale napotkałem pewne problemy, i dlatego napisałem Słyszałem/czytałem, że możesz pracować nad tym CXF. –