Liferay 7 GA4: Quali sono le novità su Apache CXF?

L'ultimo rilascio di Liferay Portal 7 CE GA4 del 28 giugno 2017 è stato molto significativo riguardo il framework Apache CXF che Liferay ha adottato per lo stack JAX-WS/JAX-RS. La modifica più rilevante è l'aggiornamento dalla versione 3.0.3 alla 3.1.9 (di dicembre 2016). I moduli OSGi interessati alla modifica fanno parte del gruppo apps:foundation:portal-remote:
- portal-remote-cxf-common
- portal-remote-cxf-jaxrs-common
- portal-remote-soap-extender
- portal-remote-rest-extender
Chi di voi abbia letto l'articolo Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style, ricorderà che era basato sulla GA2 di Liferay e sui bundle Apache CXF 3.1.6 necessari per lo sviluppo del client SOAP.
Sulla GA4 di Liferay, lo sviluppo di un client SOAP non richiede più l'installazione di tutti i bundle Apache CXF indicati su Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style ma è più che sufficiente l'installazione dei seguenti bundle:
- Apache CXF Runtime Simple Frontend (v. 3.1.9)
- Apache CXF Runtime JAX-WS Frontend (v. 3.1.9)
- Apache CXF Runtime XML Binding (v. 3.1.9)
- Apache XmlSchema Core (v. 2.2.1)
I primi tre bundle della lista sono utilizzati dal modulo portal-remote-soap-extender ma non sono esportati, è necessario quindi eseguire l'installazione affinché il client SOAP funzioni correttamente. L'ultimo bundle della lista è richiesto da Apache CXF Runtime Simple Frontend, quello esportato da Liferay è la versione 2.1.0 non compatibile (e tal proposito ieri ho fatto una pull-request sul repository di Liferay). In Figura 1 sono mostrati i bundle Apache CXF e il client SOAP di esempio installati sull'istanza Liferay 7 CE GA4.
Qualora la vostra installazione Liferay risieda su JBoss EAP o Wildfly, consiglio di procedere con la disattivazione del modulo org.jboss.as.webservices onde evitare comuni errori (come quelli a seguire), causati da versioni diverse del framework Apache CXF caricate dal Class Loader.
- java.lang.ClassCastException: Cannot cast org.apache.cxf.wsdl11.WSDLManagerImpl to org.apache.cxf.wsdl.WSDLManager
- java.lang.IllegalAccessError: tried to access class org.apache.cxf.BusFactory$BusHolder from class org.apache.cxf.BusFactory
Il servizio SOAP che ho in più occasioni utilizzato come esempio, (anche nell'articolo Liferay 7: Come realizzare un client SOAP con Apache CXF in OSGi Style) non è più disponibile, approfitterò quindi per pubblicare a breve un esempio di client SOAP con lo scopo d'integrare Liferay con il sistema di CRM Salesforce.
Per approfondimenti sul supporto JAX-WS e JAX-RS potreste seguire il mio intervento all'ultimo Symposium LIferay Italy 2016 (video + slide).