Combination View Flat View Tree View
Threads [ Previous | Next ]
toggle
Alfonso Dou Oblanca
Uso de servicio web JSON (getFileAsStream)
April 19, 2012 12:21 AM
Answer

Alfonso Dou Oblanca

Rank: New Member

Posts: 3

Join Date: November 26, 2008

Recent Posts

Hola,
estoy intentando crear una aplicación Java que sea capaz de recuperar documentos/ficheros "subidos" a Liferay. Me baso en el ejemplo descrito en http://www.liferay.com/about-us/news/-/blogs/9308485/maximized. Utilizo Liferay 6.1 CE GA 1 y el servicio al que llamo es

1com.liferay.portlet.documentlibrary.service.DLFileEntryServiceUtil#getFileAsStream


El problema que tengo es que no consigo que me devuelva el documento, no me da error pero me devuelve 0 bytes siempre.

El código que estoy usando es este:

 1    import org.apache.http.HttpHost;
 2    import org.apache.http.HttpResponse;
 3    import org.apache.http.NameValuePair;
 4    import org.apache.http.auth.AuthScope;
 5    import org.apache.http.auth.UsernamePasswordCredentials;
 6    import org.apache.http.client.AuthCache;
 7    import org.apache.http.client.entity.UrlEncodedFormEntity;
 8    import org.apache.http.client.methods.HttpPost;
 9    import org.apache.http.client.protocol.ClientContext;
10    import org.apache.http.impl.auth.BasicScheme;
11    import org.apache.http.impl.client.BasicAuthCache;
12    import org.apache.http.impl.client.DefaultHttpClient;
13    import org.apache.http.message.BasicNameValuePair;
14    import org.apache.http.protocol.BasicHttpContext;
15   
16    import java.io.File;
17    import java.io.FileOutputStream;
18    import java.io.IOException;
19    import java.io.OutputStream;
20    import java.util.ArrayList;
21    import java.util.List;
22   
23    public class Example {
24   
25        public static void main(String[] args) throws Exception {
26   
27            HttpHost targetHost = new HttpHost("localhost", 8080, "http");
28            DefaultHttpClient httpclient = new DefaultHttpClient();
29            httpclient.getCredentialsProvider().setCredentials(
30                    new AuthScope(targetHost.getHostName(), targetHost.getPort()),
31                    new UsernamePasswordCredentials("test", "test"));
32   
33            // Create AuthCache instance
34            AuthCache authCache = new BasicAuthCache();
35            // Generate BASIC scheme object and add it to the local
36            // auth cache
37            BasicScheme basicAuth = new BasicScheme();
38            authCache.put(targetHost, basicAuth);
39   
40            // Add AuthCache to the execution context
41            BasicHttpContext ctx = new BasicHttpContext();
42            ctx.setAttribute(ClientContext.AUTH_CACHE, authCache);
43   
44            HttpPost post = new HttpPost("/api/secure/json");
45   
46            List<NameValuePair> params = new ArrayList<NameValuePair>();
47            params.add(new BasicNameValuePair("serviceClassName", "com.liferay.portlet.documentlibrary.service.DLFileEntryServiceUtil"));
48            params.add(new BasicNameValuePair("serviceMethodName", "getFileAsStream"));
49            params.add(new BasicNameValuePair("serviceParameters", "[fileEntryId,version]"));
50            params.add(new BasicNameValuePair("fileEntryId", "11718"));
51            params.add(new BasicNameValuePair("version", "1.0"));       
52            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
53            post.setEntity(entity);
54   
55            HttpResponse resp = httpclient.execute(targetHost, post, ctx);
56            
57            try
58            {
59                File f = new File("outFile.java");
60                OutputStream out = new FileOutputStream(f);
61                resp.getEntity().writeTo(out);
62                out.close();
63                System.out.println("Fichero creado ...................................");
64            } catch (IOException e) {
65                System.out.println("Error al crear el fichero: " + e.getMessage());
66            }
67            
68            httpclient.getConnectionManager().shutdown();
69        }
70    }


¿ Alguna idea de que puedo estar haciendo mal ?

Gracias por adelantado y un saludo,

Alfonso
Alfonso Dou Oblanca
RE: Uso de servicio web JSON (getFileAsStream)
April 19, 2012 9:14 AM
Answer

Alfonso Dou Oblanca

Rank: New Member

Posts: 3

Join Date: November 26, 2008

Recent Posts

De momento uso el servicio getFileEntry para obtener todos los datos del documento (companyId, repositoryId, version, ...) y apoyándome en la clase JSONObject (JSON in Java) puedo construir el path para acceder al fichero y trabajar con él.
Esta es la parte del código que utilizo:

 1        List<NameValuePair> params = new ArrayList<NameValuePair>();
 2        params.add(new BasicNameValuePair("serviceClassName", "com.liferay.portlet.documentlibrary.service.DLFileEntryServiceUtil"));
 3        params.add(new BasicNameValuePair("serviceMethodName", "getFileEntry"));
 4        params.add(new BasicNameValuePair("serviceParameters", "[fileEntryId]"));       
 5        params.add(new BasicNameValuePair("fileEntryId", "12916"));
 6
 7        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params, "UTF-8");
 8        post.setEntity(entity);
 9
10        HttpResponse resp = httpclient.execute(targetHost, post, ctx);
11       
12        OutputStream string = new ByteArrayOutputStream();
13       
14        resp.getEntity().writeTo(string);
15       
16        JSONObject jsonObject = new JSONObject(string.toString());
17       
18        System.out.println(jsonObject.get("description"));


Con esto salgo del apuro, pero entiendo que lo bueno sería utilizar el servicio getFileAsStream y no consigo hacerlo funcionar emoticon