ERA v8.0.0.x utilizza essa la propria versione modificata di Wink v1.1-incubazione. Se navighi su {WAS_HOME}/plugins, vedrai un file .jar denominato com.ibm.ws.jaxrs.jar. Se esplori il MANIFEST all'interno di tale artefatto, vedrai che IBM ha modificato l'incubazione di Wink v1.1 e creato la propria v1.1.1. Ti consigliamo di utilizzare questa versione, perché incorpora wink-jcdi-server. Altrimenti, non puoi iniettare il tuo EJB nelle tue Wink Resources, il che crea una serie di fastidiosi problemi. Generalmente non mi piace intrecciare me stesso a una soluzione specifica del fornitore, ma in questo caso, vorrai utilizzare l'implementazione di Wink di IBM. Ho backportato wink-jcdi-server da v1.2-incubating to v1.1-incubazione con successo temporaneo (ho ottenuto il funzionamento di jcdi per funzionare, ma poi, senza una causa root determinata, ho perso alcune distribuzioni in seguito). Quindi, risparmia tonnellate di frustrazione e usa l'implementazione di Wink di IMB. L'implementazione di Wink di IBM sarà esposta alla tua app, tramite un artefatto correlato a OSGi, indipendentemente dal fatto che imposti la politica del classloader su PARENT_FIRST o PARENT_LAST. Sospetto che sia un bug. Dovrai anche includere l'artefatto com.ibm.ws.prereq.jaxrs.jar nel tuo progetto.
in web.xml, utilizzare la seguente configurazione:
<!-- 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>
Secondo IBM's own WAS v8.0 video on JAX-RS, la sottoclasse applicazione otterrà automaticamente riconosciuto estendendo la classe Application e l'annotazione ApplicationPath. Questo non è il caso. Devi specificare la sottoclasse Application in web.xml. Tuttavia, noterai che la console ti dirà che è stata utilizzata l'applicazione Wink predefinita. Questo è falso. Il tuo corso verrà prelevato e dovrai sovrascrivere il metodo getClasses e registrare i tuoi fornitori, risorse, ecc. Questo comportamento è stato osservato e accuratamente testato a partire da WAS v8.0.0.8.
Si potrebbe provare CXF in WAS 8 come alternativa.
Come Geronimo e TomEE, WAS è basato sui prodotti Apache. Potrei sbagliarmi, ma, per ultima cosa ricordo, WAS v8.0 utilizza Apache OpenWebBeans v1.0, Apache BVal v1.0, Apache OpenJPA v2.1.2-SNAPSHOT. Non sono sicuro di JAXB, ma penso che utilizzino il proprio framework json4j. Io uso MOXy con sorprendentemente molto successo.
Grazie. Puoi vedere tutte le versioni con 'unzip -p /opt/IBM/WebSphere/AppServer/plugins/com.ibm.ws.prereq.jaxrs.jar META-INF/MANIFEST.MF' – DarVar
Ho usato CXF dal 2017 su un WAS 8 e ha funzionato (perché hai scritto _ "Potresti provare CXF in WAS 8, ma probabilmente ti imbatterai in problemi."_) Ma molto informativo postazione – aliopi
@aliopi - Grazie. Buono a sapersi.Penso di aver incontrato problemi con il classloader quando stavo tentando di usare CXF per un'applicazione web su WAS 8 anni fa, ma ho riscontrato alcuni problemi, motivo per cui ho scritto Ho sentito/letto che potresti far funzionare CXF su di esso, modificherò la mia risposta. –