Problema con webservices

cancel
Showing results for 
Search instead for 
Did you mean: 
jamayol
Member II

Problema con webservices

Hola a todos,

Tengo la siguiente configuración: Alfresco 3.2 instalado sobre Windows XP y una aplicación java en la que utilizo el sdk que proporciona alfresco (alfresco-community-sdk-3.2). Estoy tratando de recuperar contenidos del repositorio utilizando un ejemplo de la documentación pero no consigo obtener más metadata que el "path" del documento.


           RepositoryServiceSoapBindingStub repositoryService = WebServiceFactory.getRepositoryService();        
           Query query = new Query( Constants.QUERY_LANG_LUCENE, "TEXT:'"+queryStr+"'");
           QueryResult queryResult = repositoryService.query(STORE, query, true);
           ResultSet resultSet = queryResult.getResultSet();
           ResultSetRow[] rows = resultSet.getRows();

           if (rows == null) {
               System.out.println("No query results found.");

           } else {
               System.out.println("Results from query:");
              
               List<ContentResult> results = null;
              if (rows != null && rows.length > 0) {
                 results = new ArrayList<ContentResult>();

                   for(ResultSetRow row : rows) {
                       String nodeId = row.getNode().getId();
                       ContentResult contentResult = new ContentResult(nodeId);
                      
                       NamedValue [] namedValues = row.getColumns();

                       for (int i=0;i<namedValues.length;i++) {
                          NamedValue namedValue = namedValues[i];
                          
                          if (!namedValue.getIsMultiValue()) {
                             System.out.println("  name="+namedValue.getName()+" value="+namedValue.getValue());
                          } else {
                             String valores[] = namedValue.getValues();
                             for (int j=0;j<valores.length;j++) {
                                System.out.print(valores[j]+", ");
                             }
                          }
                       }

                       results.add(contentResult);
                      
                   }
               }
           }

La traza (salida) de este programa quedaría así:


name={http://www.alfresco.org/model/content/1.0}path value=/{http://www.alfresco.org/model/application/1.0}company_home/{http://www.alfresco.org/model/site/1.0}s...
  name={http://www.alfresco.org/model/content/1.0}path value=/{http://www.alfresco.org/model/application/1.0}company_home/{http://www.alfresco.org/model/site/1.0}s...

Como veis, encuentra contenidos que encajan con la búsqueda, pero solo me devuelve el campo  "{http://www.alfresco.org/model/content/1.0}path" y necesito el resto (nombre, descripción, etc.). A alguien le ha pasado algo similar?

Gracias y un saludo,

Juan Antonio Mayol
5 Replies
pjcaracuel_2349
Active Member II

Re: Problema con webservices

Buenas Juan Antonio,

Te pongo un ejemplo que convenientemente adaptado a tu codigo, deberia funcionarte.


AuthenticationUtils.startSession("admin", "admin");
Store store = new Store("workspace", "SpacesStore");
String path = "/app_company_home";
RepositoryServiceSoapBindingStub repositoryService =
WebServiceFactory.getRepositoryService();
ContentServiceSoapBindingStub contentService = WebServiceFactory.getContentService();
Reference reference = new Reference(store, null, path);
Predicate predicate = new Predicate();
predicate.setNodes(new Reference[] { reference });
Node[] nodes = repositoryService.get(predicate);
NamedValue[] namedvalues = nodes[0].getProperties();
for (int j = 0; j < namedvalues.length; j++)
   if (namedvalues[j].getName() != null && namedvalues[j].getValue() != null)
           System.out.println(namedvalues[j].getName() + "=" + namedvalues[j].getValue());
AuthenticationUtils.endSession();

Saludos
jamayol
Member II

Re: Problema con webservices

Hola,

Gracias por la pronta respuesta. En la ejecución del código que me pasas se produce la siguiente excepción Failed to resolve to a single NodeRef with parameters (store=workspaceSmiley FrustratedpacesStore uuid=null path=/app_company_home), found 0 nodes. (concretamente en la línea Node[] nodes = repositoryService.get(predicate);.

Y otra pregunta, en el código que me pasas… de qué manera establezco la query a lucene? En predicate.setQuery(query); ?

Gracias!!!
pjcaracuel_2349
Active Member II

Re: Problema con webservices

A ver, que yo de programacion ando justo.

Te cuento, tu estas obtiendo los id de los documentos en
String nodeId = row.getNode().getId();

Luego lo de la query ya esta resuelto pq ya tienes los resultados, ahora tienes que recorrerlos y obtener los metadatos de cada nodo.

Para ello tendras que buscar una manera de obtener el nodo a partir del id del documento, echandole un vistazo al javadoc del SDK no tendrias problemas en ello.

Y una vez hecho esto, bastaria con ejecutar el siguiente codigo para cada nodeId que te haya devuelto la consulta.
NamedValue[] namedvalues = nodes[0].getProperties();
for (int j = 0; j < namedvalues.length; j++)
   if (namedvalues[j].getName() != null && namedvalues[j].getValue() != null)
           System.out.println(namedvalues[j].getName() + "=" + namedvalues[j].getValue());

REsumiendo basta con crear un objeto nodes para cada id que hayas obtenido.

Saludos
jamayol
Member II

Re: Problema con webservices

Ummm, en principio podría funcionar, pero no estamos haciendo una consulta para cada uno de los resultados obtenidos? Es decir, con la primer consulta me traigo la lista de resultados. Itero sobre la lista y para cada uno de sus elementos pregunto por su metadata… no sé, no lo veo viable.

El tema es que el método repositoryService.query(STORE, query, true); está funcionando mal; de hecho, el último parámetro es "include metadata", siendo el resultado el mismo si se pone a true o a false.

Saludos,
pjcaracuel_2349
Active Member II

Re: Problema con webservices

Ok, respecto al uso del valor true o false y que el comportamiento sea el mismo, he visto varios post que preguntan sobre ello y estan sin respuestas.

Por otro lado, podias echarle un vistazo a este por si te ayuda en lo tuyo.
http://forums.alfresco.com/en/viewtopic.php?f=4&t=10389

Saludos