cancel
Showing results for 
Search instead for 
Did you mean: 

Download Documenti Java Code - Alfresco + Jira + CAS

mrball
Champ in-the-making
Champ in-the-making
Salve a tutti,
sto cercando di sviluppare un download massivo di documenti da Alfresco attraverso un servizio Rest sviluppato in Java.
La funzione deve restituire un file zip con dentro tutti i documenti.

Il problema è che l'infrastruttura non mi permette di prendere il file anche se l'utente corrente è autenticato. Stiamo parlando di Jira che interagisce con Alfresco e gli utenti vengono autenticati attraverso il CAS su entrambi.


Sto usando <strong>org.apache.http.client.HttpClient httpClient = new DefaultHttpClient();</strong> di seguito un estratto del codice che dovrebbe eseguire il downalod dei singoli file e salvarli in locale sul server per poi creare il file zip.


String defaultURL= "https://alfresco-server:8080/alfresco/d/a/workspace/SpacesStore/70847d54-dd4d-4660-a557-f788a8f2b94e...";
HttpGet httpget = new HttpGet(defaultURL);
org.apache.http.client.HttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(httpget);
HttpEntity entity = response.getEntity();
if (entity != null) {
long len = entity.getContentLength();
InputStream inputStream = entity.getContent();
…….

// Something here to get the input stream
// and the file object to put into the zip file


Con questo codice ho un oggetto inputStream che risulta nullo e quindi i file dentro al file zip sono di zero byte.
Aggiungo che andando in debug il valore di "len" è pari a "-1"


Inoltre vi informo che da web (dopo l'autenticazione attraverso il CAS) il seguente link funziona correttamente:

<a href="https://alfresco-server:8080/alfresco/d/a/workspace/SpacesStore/70847d54-dd4d-4660-a557-f788a8f2b94e...">Download file </a>
2 REPLIES 2

superdeder
Champ in-the-making
Champ in-the-making
Anche a me servirebbe una mano su questo argomento.
Come a MrBall anche a me l' inputStream risulta nullo e il valore del ticket è inconsistente.
Grazie

davidciamberlan
Elite Collaborator
Elite Collaborator
Ciao,

premetto che non sono esperto di CAS… quindi perdonami se dico inesattezze.

Quello che tu stai tentando di fare è chiamare in modo diretto l'API REST di Alfresco.
Perchè questo funzioni, bisogna passare come parametro un TICKET di Alfresco (oppure se usi la basic auth, passare in modo diretto username e password… ma non mi sembra questo il tuo caso).

Normalmente, per ottenere un ticket puoi fare una chiamata all'API

http://localhost:8080/alfresco/service/api/login?u=<user>&pw=<pass>

da cui otterrai (in XML o JSON a seconda che la tua chiamata sia GET o POST) una risposta che contiene un TICKET fatto più o meno in questo modo:
TICKET_2cd4027a1f241d7332f87183cc2f3e0414bee8ca

Questo ticket lo dovrai aggiungere come parametro di nome "alf_ticket" alla tua chiamata per il download.

Nel tuo caso, dovresti recuperare il ticket di Alfresco da CAS… ma questo non so se sia possibile (sembrerebbe di no da quello che leggo nel paragrafo Issues > other servlet della pagina del wiki su Configuring SSO between CAS and Alfresco).

In alternativa, come ho visto fare in alcuni casi, puoi creare un utente di servizio che userai solo per le chiamate ai webscript. Valuta bene però se questo è accettabile ai fini della sicurezza della tua applicazione.