Problema: vogliamo caricare in maniera massiva una lista di utenti su Liferay. Per farlo non vogliamo utilizzare portlet scritte ad hoc e, ovviamente, non possiamo nemmeno caricare gli utenti direttamente in tabella.
Soluzione:usiamo i web services cheLiferay esporta in maniera nativa e pilotiamo gli inserimenti attraverso di essi.
Per farlo dobbiamo prima fare qualche setup sul portale.
Nel file portal-ext.properties dobbiamo andare ad abilitare il nostro ip fra quelli che possono invocare i servizi; per farlo dobbiamo quindi aggiungere questa property:
axis.servlet.hosts.allowed=127.0.0.1,SERVER_IP,151.51.12.149
A questo punto siamo pronti per invocare i servizi e vedere che tutto sia a posto.
Invochiamo il nostro portale all'indirizzo:
http://www.ilmioportaleliferay.it/tunnel-web/secure/axis
Dopo aver fornito i dati di una utenza valida di portale per la basic authentication, ci viene fornita una lista di tutti i servizi che il portale espone.
Questa lista viene generata automaticamente a partire dalle definizioni dei singoli service.xml del Service Builder: usando l'opzione remote="true", infatti, quando si dichiara una nuova entità, il Service Builder provvederà a mapparla e ad esporla in questa lista.
Troviamo il servizio che ci interessa; nel dettaglio Portal_UserService.
Invocando il wsdl avremo accesso alla definizione del servizio stesso.
Una volta generato lo stub del servizio con un toolkit come axis, possiamo procedere all'invocazione del metodo per creare le utenze.
UPDATE:Se siete pigri e volete il codice già fatto, questo post fa' al caso vostro: - Usare i web services di Liferay per popolare utenti: un po' di codice! :)
Una nota:il framework di Liferay attualmente ha un bug (?) che non permette il corretto funzionamento dei web services se non chiamando l'indirizzo esposto sotto "secure".
Trovate qui e qui un po' di reference al problema relativo al PermissionChecker e all'eccezione generata.