Ejecutar web services

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

Ejecutar web services

Hola:

Estoy intentando ejecutar los ejemplos de Web services del SDK de Alfresco y no hay forma humana de conseguirlo, ¿Alguien ha tenido este problema o sabe como ejecutarloscorrectamente?

Hasta ahora habia usado los web service "dentro" del propio Alfresco, es decir, desde un action por ejemplo. El problema ahora es ¿Cómo se usan los web services desde otra aplicación? desde un Java, jsp, etc… Cualquier ayuda seria de agradecer.


Un saludo.
10 Replies
pablo_zapico
Member II

Re: Ejecutar web services

Yo he tenido que montar hace poco un servicio web y antes probe los sdk de ejemplo desde eclipse. Que error te da?
ditmgl
Member II

Re: Ejecutar web services

Vale, los errores que tenia era que no me leia bien las clases,los ejecutaba desde la consola usando el comando java. Al ejecutarlo desde Eclipse ha funcionado perfectamente, gracias.

Pero sigo teniendo la duda de como ejecutar los webservices desde otra aplicación fuera de alfresco. Por ejemplo, yo quiero tener un formulario donde un usuario meta unos datos y desde ahi se cree en Alfresco unas carpetas con los nombres de los datos metidos por el usuario.

Hay algun comando para llamar a los web services desde otras aplicaciones java, jsp, php etc… o simplemente hay que usarlos igual que se podria usar en un action, es decir, los importas,los usas y punto.

Un saludo.
pablo_zapico
Member II

Re: Ejecutar web services

Tengo poca experiencia con alfresco, eso lo primero, jejeje. Ahora respondo

El problema por cual no te funcionaba es q los ejemplos del sdk tienen como dependencia el proyecto "SDK AlfrescoEmbedded", eso quiere decir que carga todas sus librerias. Yo para algunas cosas que tuve que hacer me copie las librerias a mi proyecto y listo.

Al final tu utilizarias  tus aplicaciones java como cliente del servicio web, con lo cual simplemente te nutres de las librerias que proporciona alfresco para utilizar sus metodos y puedes invocar al servicio web desde cualquier parte siempre y cuando utilices correctamente las librerias.

NOTA: Los ejemplos del SDK la parte de servicios, son tb clientes del servicio web, el servicio en si esta dentro del servidor

Por ejemplo



// Esta linea me confundi, sirve para indicar la ubicacion del fichero de propiedades para el logging
DOMConfigurator.configure("logging.xml");

// Esta es la linea correcta para indicar la ubicacion del api para que el servicio web se conecte correctamente
WebServiceFactory.setEndpointAddress("http:\\localhost:8080\alfresco\API");

AuthenticationUtils.startSession(rs.getString(FileKeys.USER), rs.getString(FileKeys.PASS));   
/* TU CODIGO para interactuar con alfresco utilizando los metodos de las librerias*/
AuthenticationUtils.endSession();

La primera linea DOMConfigurator es para que definas donde esta el servidor de alfresco, por defecto toma esa si no pones nada. Hay un properties en la carpeta extension de los ejemplos pero aunque lo modifiques si no se lo indicas cogera por defecto localhost por el puerto 8080

Yo hice algo parecido para realizar una carga de contenido, lo unico que realizo la carga en vez desde un formulario, desde unos ficheros txt… tu preparas tus objetos con el contenido y despues vas cargandolos en el contenido que necesita el servicio web con los metodos del API y realizas la llamada.

Espero que te sirva de algo la información. Si necesitas algo mas, me lo dices.


Un saludo
ditmgl
Member II

Re: Ejecutar web services

Vaaale, pues no consigo hacer una aplicacion de prueba que me genere un par de carpetas dentro de Alfresco. Para empezar ni si quiera me encuentra el método main.

C:\Alfresco\tomcat\webapps\alfresco\WEB-INF\lib\org\alfresco\pruebas>java Prueba

Exception in thread "main" java.lang.NoClassDefFoundError: Prueba (wrong name: o
rg/alfresco/pruebas/Prueba)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Prueba.  Program will exit.

Y el códgio:

   public static void main(String[] args) throws Exception {
      Prueba p = new Prueba();
      p.crearCarpeta();
      }

¿Alguna idea para ejecutar un java que use webservices desde fuera del Eclipse?
pablo_zapico
Member II

Re: Ejecutar web services

Por partes…

Primero en 10 min me voy al cafe, volvere a las 11:30, jejeje.

Estas haciendo una aplicacion java de consola? si es eso no te encuentra el metodo main porque no estas configurando bien el classpath. Tienes que configurarlo indicandole donde se encuentran las librerias. Yo lo que tengo es un .bat que configura el classpath y hace la llamada, te lo pego por si te puede ayudar de algo


set CLASSPATH=C:\webService
set CLASSPATH=C:\webService\windows;%CLASSPATH%
set CLASSPATH=C:\webService\alfresco\extension\webserviceclient.properties;%CLASSPATH%
set CLASSPATH=C:\webService\logging.xml;%CLASSPATH%
set CLASSPATH=C:\webService\lib\alfresco-web-service-client.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\log4j-1.2.15.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\alfresco-web-service-client.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\xmlsec-1.4.1.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\activation.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\axis-1.4.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\bcprov-jdk15-137.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\commons-discovery-0.2.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\commons-logging-1.1.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\jaxrpc.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\mail.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\opensaml-1.0.1.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\saaj.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\wsdl4j-1.6.2.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\wss4j.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\xalan.jar;%CLASSPATH%
set CLASSPATH=C:\webService\lib\dependencies\xercesImpl-2.8.0.jar;%CLASSPATH%

java org.alfresco.controller.ControllerWebService

pause


Con esto deberia encontrarte el main y las librerias de los servicios web. Y deberia llegarte sin problemas hasta "AuthenticationUtils.startSession(rs.getString(FileKeys.USER), rs.getString(FileKeys.PASS));"

Si despues de esto te sigue fallando, miramos mas opciones.
pablo_zapico
Member II

Re: Ejecutar web services

A todo esto no se en q estaba pensando pero el DOMConfiguratior es para configurar la ubicacion del fichero de propiedades de logging, jejejeje. Para indicar la ubicación del Api para que el servicio web se conecte es:


WebServiceFactory.setEndpointAddress("http:\\localhost:8080\alfresco\API");

Estas cosas pasan por copiar y pegar y no pararse a mirar.

Lo siento
ditmgl
Member II

Re: Ejecutar web services

A todo esto no se en q estaba pensando pero el DOMConfiguratior es para configurar la ubicacion del fichero de propiedades de logging, jejejeje. Para indicar la ubicación del Api para que el servicio web se conecte es:


WebServiceFactory.setEndpointAddress("http:\\localhost:8080\alfresco\API");

Estas cosas pasan por copiar y pegar y no pararse a mirar.

Lo siento

No pasa nada,al fin y al cavo no lo habia puesto,ya que tengo entendido que si no lo pones (o lo cambias) entonces utiliza la direccion por defecto que es laque has puesto. En cualquier caso gracias por la idea del .bat que ni se me habia pasado por la cabeza (cosas de no usar nunca la consola) peeero sigo teniendo un fallo de clases que no encuentra (repositoryFault creo).
Creo que me siguen faltando añadir clases al classpath, voy a seguir investigando.

Gracias de nuevo.
pablo_zapico
Member II

Re: Ejecutar web services

Las librerias que tngo yo en en mi .bat son las que se necesitan para q el servicio web funcione. Asi que si añades esas librerias te tiene q funcionar seguro. Yo tpc estoy de hacer cosas en consola, toda la vida haciendo web y esto del classpath al principio tpc lo habia pensado, seguro q se puede configurar el classpath de alguna manera mas rapida y sencilla…

Lo importante es q añadas al menos las mismas librerias que estan en el bat que te pegue. Con esas te funcionara.

Lo del APi es cierto si no pones nada por defecto coge el localhost, lo unico q el servicio web lo invocaras desde un equipo el cual no es donde estara el servidor, no?. Te lo digo porque si lo que vas hacer es invocar el proceso desde el mismo lugar donde esta el servidor igual te conviene mas usar el API del SDK directamente y no usar los servicios web, dependiendo de la carga que vayas hacer la latencia puede ser considerable.


Un saludo
ditmgl
Member II

Re: Ejecutar web services

Vale, genial, he conseguido ejecutar web services tal y como queria.

Ahora la pregunta del millom: ¿Como se pueden ejecutar web services del Alfresco desde una URL?

La idea es ejecutar un web service desde un trigger de SQL server, bueno a seguir dandole al google.

Un saludo.