Archive for the ‘webservice’ Category

Consumir WebServices com GeneXus

Friday, November 23rd, 2012

Quando certos WebServices passam a ser uma dor de cabeça

webservice genexus delfasoft fabricio de los santos

Algumas vezes temos que consumir um WebService gerado também por GeneXus em algum projeto no inicio do desenvolvimento, onde existem mudanças de todo tipo, de lógica de negócio, de arquitetura, etc e o WebService que numa hora funciona deixa de funcionar.

Ai o fornecedor do WebService, indica a situação, nós executamos o WSDL import wizard como fizemos a primeira vez, mas quando vamos a executar o programa que usa o WebService, nada feito ou não muda nada ou da um erro de difícil interpretação. Não conseguimos de jeito nenhum que o WebService funcione.

Poderia ser alguma mensagem de erro tipo assim:

javax.servlet.ServletException:

java.lang.AbstractMethodError: com.genexus.xml.GXXMLSerializable.writexml

(Lcom/genexus/xml/XMLWriter;Ljava/lang/String;Ljava/lang/String;Z)V at

com.genexus.GXObjectCollectionBase.writexmlcollection(Unknown Source)

Bem, não tudo é perfeito, isso algumas vezes acontece.

Você pode tentar todas as coisas que já tentei em outras oportunidades, e acredito seguirei tentando no futuro, mas no final vou te dizer o que SIM sempre funciona, ou talvez alguém escreva um comentário dizendo “isso acontece por… ou isso se resolve também de outra forma…” e não temos que ser tão extremistas, mas da forma que consegui até agora é a seguinte:

Primeira coisa, tente importar o WSDL de novo, talvez nada muda e tudo segue funcionando.

Se não funcionou, no objeto que está usando o WebService, comente toda a referência e apague as variáveis, de SDT, Objeto externo relacionado, etc e importe de novo o WSDL

Se ainda não funciona, pode procurar no Servidor para apagar as classes ou dlls relacionadas, reiniciar o servidor e tentar de novo…

Mas neste ponto eu já estou indo a solução extrema, que tem sido útil em outras oportunidades para outros problemas similares.

Apague todo o relacionado a esse WebService, e crie outro Environment, e importe o WSDL novamente, e com certeza vai caminhar.

Tomara alguém tenha outra dica, mas tenha certeza que como falei acima, se está no inicio de algum projeto criar outro environment vai levar menos tempo que quebrar a cabeça.

Boa sorte.

Até a próxima,

Fabricio De los Santos

__________________________________________________________
ScrumMaster, Project Manager, Coaching and Mentoring GeneXus
K2B Tools Agent – The best Patterns Tool to integrate with GeneXus
www.fabriciodelossantos.com
www.delfasoft.com.br

Tips: Tutorial como hacer un WebService con GeneXus

Wednesday, November 29th, 2006

El siguiente, es un documento que creé para de alguna forma tener un ayuda memoria de como crear un WebService con GeneXus. Tanto para publicar como para consumir.

Publicando un Webservice

Paso 1
Creamos un procedimiento que será el webservice a publicar. En este ejemplo digamos que se trata de un sencillo procedimiento que devuelve la programación de televisión de determinado día por ejemplo. Nota: No controlo condiciones ni saco la información de una tabla para no hacer más complejo el tutorial.
Debemos colocar las siguientes propiedades al objeto:

Paso2
Vamos a devolver la programación en un SDT por lo tanto lo crearemos con la siguiente estructura:

Paso 3
El fuente del programa como mencioné antes carga los datos “hardcode”

Como pueden ver en el fuente del programa, hice una aclaración de no poner “out:” en los parámetros. Realmente cuando es un SDT y se le pone “out:” indicando que es de salida, el webservice no funciona, con otras variables no SDT, no deberían tener problemas.Paso 4
Luego de tener pronto este procedimiento, simplemente especificamos y lo compilamos.
Y ya está publicado nuestro WebService.

Ahora siguiendo con el mismo ejemplo, veremos como:

Consumir un WebService

Paso 1
En diseño abrimos el WSDL Inspector, esto lo hacemos en Tools / WSDL InspectorDonde dice Web Service URL colocamos la url de donde se encuentra el WebSerivce publicado en nuestro caso era:

http://localhost/hbo/aServidorProgramacion.aspx?wsdl

En mi ejemplo el directorio virtual se llama “hbo”

Luego le damos al botón “Inspect” y vemos como nos arma la estructura del WebService para ser consolidado en nuestra kb destino cuando hagamos click en el botón “Add Reference”

Paso 2
Nos pasamos a prototipo y creamos un webpanel que consumirá el WebService y nos mostrará en un Grid, la programación.
A continuación el fuente:

La variable de tipo location, nos indica donde está el webservice que queremos consumir. En el ejemplo, los datos están hardcode pero obviamente pueden ser dinámicos.
Existe otra forma de definir el location que es mediante el archivo location.xml que debería estar en el directorio virtual donde estamos corriendo la aplicación.
Podrían definirse varios “locations” en el mismo archivo.Dicho archivo en nuestro caso tendría la siguiente información:

Nótese que hay un elemento significativo en el nombre del location

GxLocation name

Genexus muestra el tipo de datos del WebService como:

Programacion.ServidorProgramacion

Pero a la hora de utilizarlo tanto con la función como en el archivo location debemos sustituir el último punto “.” que aparezca por un “_”

La variable &ws es del tipo del WebService y es esta misma la que se usa para invocarlo.
Se puede invocar de las dos formas

&Grilla = &ws.Execute()

o

&ws.Execute(&Grilla)

El evento load muestra como cargamos la grilla de programación.

Paso 3
Especificamos, compilamos y ejecutamos el WebPanel que llamamos BuscaProgramación y el resultado que obtenemos es el siguiente:

En fin un pequeño resumen, pueden haber variantes pero este es un mini tutorial para salir adelante con un WebService en GeneXus.Más información la puede encontrar aquí.

Otros tutoriales publicados por mí en http://fabriciodls.blogspot.com/

Fabricio De los Santos
Gerencia de Proyectos –
Consultoría GeneXus –
ERP – Sistemas de Misión Crítica – Bases de Datos.

Vea mis blogs en:
www.fabriciodelossantos.com