Llamar a un Web Services desde Oracle Forms
Una de las ventajas que aporta Forms en tres capas ya desde la versión 9i pero en especial en la nueva versión 11g, es la integración con otras tecnologías.
En este post vamos a ver lo sencillo que es integrar forms, una tecnología de más de 20 años, con una de las tecnologías que han irrumpido últimamente en el mundo del desarrollo de aplicaciones y de soluciones TI empresariales, que no es otra que SOA y en concreto Web Services.
Para consumir un Servicio desde Forms hay que seguir los siguientes 4 pasos.
Paso 1. Identificar el WSDL
El proveedor del servicio nos ha facilitar la URL del WSDL (Web service definition lenguaje). Mediante WSDL se define la interfaz pública a los servicios Web. En definitiva describe la forma de comunicación entre consumidor del servicio y proveedor del servicio.
Como ejemplo utilizaremos el siguiente servicio público que nos devuelve la temperatura actual de la ciudad indicada. El WSDL está en.
http://www.webservicex.net/WCF/ServiceDetails.aspx?SID=48
Paso 2. Crear un proxy
Desde JDeveloper y a través de un wizard crearemos una clase Java que tendrá como misión actuar de “puente” entre forms y el Servicio Web. Os muestro los pasos más importantes en el siguiente GIF animado.

Una vez creado nuestro proyecto podemos probarlo desde el mismo JDeveloper.
Paso 3. Empaquetar el proxy
Crearemos un .jar que será lo que utilizaremos desde Oracle Forms.

Paso 4. Importar desde Oracle Forms
Para poder utilizar el proxy JAVA desde forms hemos primero de configurar lo siguiente.
- En tiempo de diseño. Añadir en variable de sistema CLASSPATH el nuevo .jar
- En ejecución. Configurar el fichero de environment del servidor de aplicaciones donde está desplegada nuestra aplicación Forms añadiendo nuestro .jar en la variable CLASSPATH
Una vez configurado, desde la utilidad Java Importer del Forms builder importaremos las clases Java necesarias para utilizar el proxy.


El PL/SQL para consumir el servicio desde forms.

El resultado.




Hola siguiendo los pasos me envia el siguiente error al tratar de importar a forms el jar
Error – Unsupported major.minor version 50.0
Espero que me puedas ayudar
El error está relacionado con la versión de JDK utilizada para crear el proxy desde la cual se accede al WS.
Concretamente se está produciendo una incompatibilidad de versiones entres Oracle forms y la JDK utilizada para crear el proxy.
En mi “paso a paso” utilicé un JDK 1.6.0.14 para empaquetar el WS y Forms 11g para consumirlo. Debería de empaquetar el WS con una versión de JDK acorde con la versión de Oracle Forms que esté utilizando.
Un saludo.
Buen día, cómo podría lograr implementar un paso mas donde el resultado obtenido del webservice (datos xml) quede grabado en un archivo XML en el disco duro.
Lo que necesito al final subir este archivo XML a una tabla que tiene una columna de tipo XMLType en la base de datos Oracle.
No sé cómo conseguir esto desde forms o si talvés es mejor usar PL/SQL.
De antemano gracias por sus sugerencias.
Saludos cordiales.
Buenas.
Te paso un par de links que hablan de ello.
http://www.oracle.com/technetwork/database/features/xmldb/oracle-xml-db-and-forms-integration-132939.pdf
http://www.oradev.com/xml.jsp
Recuerda que un XMLTYPE es un CLOB.
Espero que te sirva de ayuda.
Un saludo
Buenas
EN El PL/SQL para consumir el servicio desde forms. me genera el siguiente error:
Error 302 component ‘NEW’ must be declared
Por favor me pueden indicar que debo hacer??
Lo siento, sin más datos nos es imposible ofrecer o pensar una solución a lo que nos está ocurriendo.
Sigue el ejemplo de nuestro post y quizás te ayude a encontrar que está pasando
Buenas tardes!
me gustaria en que parte del ORACLE-HOME tengo que almacenar el .jar que deseo utilizar?
muchas gracias
Hola.
Si quieres utilizar desde lado cliente un fichero .jar copialo en $ORACLE_HOME/forms/java y configúralo en el “formsweb.cfg”, concretamente en la variable “archive”.
Si lo necesitas para desarrollar desde el forms builder este fichero .jar ha de estar configurado en el CLASSPATH de la máquina de desarrollo.
Un saludo.
Buenos días:
Quisiera un ejemplo de la llamada a un web services que me retorne una lista de objetos. El stub generado en Jdeveloper y la forma de llamarlo en el Oracle Forms. Muchas gracias
Cuando un web services retorna una lista de datos es necesario hacer desde Oracle Forms un import de la clase Java en cuestión para poder tratarla. La creación del proxy desde Jdeveloper es idéntica a la del ejemplo del post.
No dude en ponerse en contacto con avanttic si necesita profundizar en el desarrollo de una solución a su necesidad.
buenas tengo problema para crear el proxy, estoy tratando de usar el jdeveloper 10g, pero no me da la opcion para crear este tipo de web services.
que estoy haciendo mal o debo usar otra version del jdeveloper.
Cierto, desde Jdeveloper 10g no es posible crear este tipo de proyectos. Descárguese la última versión de Jdeveloper desde el siguiente enlace.
http://www.oracle.com/technetwork/developer-tools/jdev/overview/index.html.
Hola, buenas noches.
¿Es posible consumir un webservice que tiene compresión desde Oracle Forms?
He seguido paso a paso sus instrucciones y es exitoso con webservices públicos pero cuando lo intento con el webservice que es de nuestro interés no es posible.
Según la documentación de este webservice, hay que agregar el esquema de compresión en el lado del consumidor y para ello nos proveen de un archivo DLL (WSSoapCompression.dll).
No soy experto en el tema y no sé qué pasos adicionales debo seguir.
Por cierto, tengo Oracle Forms 10g con el conjunto de parches 10.1.2.3.0
Muchas gracias por sus luces.
Hola.
Para utilizar una .DLL desde forms hay varias alternativas. Le indico alguna de ellas:
- Utilizando WEBUTIL de Oracle. WEBUTIL se ejecuta en el lado cliente por lo que la .dll también deberá de estar en el cliente.
- JAVA es capaz de hacerlo, por lo que si JAVA es capaz de hacerlo también forms:
a. A través de un PJC en el lado del cliente y si la .dll está en el cliente
b. A través de un “import java class” si la .dll se encuentra en el servidor de aplicaciones y éste es Windows
- ORA_FFI. Sólo si la .dll se encuentra en el servidor de aplicaciones y este es Windows
Un saludo.
no veo la clase en el developer suite, como hago para poder verla e importarla
gracias por su ayuda
Hola.
Si usted tiene instalada un versión 10gR2 el fichero frmjdapi.jar se encuentra en %ORACLEHOME%\forms\java
Si usted tiene instalada una versión 11g ó una 11gR2 el fichero frmjdapi.jar se encuentra en %ORACLEHOME%\fr_1\jlib
Un saludo