desde - oracle pl sql rest web services
Consumir servicios web desde Oracle PL/SQL (4)
Nuestra aplicación está interactuando con muchos servicios web en estos días. Tenemos nuestro propio paquete que alguien escribió hace unos años usando UTL_HTTP y generalmente funciona, pero necesita un poco de codificación de la envoltura de SOAP para trabajar con ciertos sistemas. Me gustaría hacerlo más genérico, pero me falta experiencia para saber con cuántos escenarios tendría que lidiar. Las variaciones están en qué espacios de nombres necesitan declararse y en el formato de los elementos. Tenemos que manejar llamadas simples con algunos parámetros y aquellas que pasan una gran cantidad de datos en una cadena codificada.
Sé que 10g tiene UTL_DBWS, pero no hay una gran cantidad de casos de uso en línea. ¿Es lo suficientemente estable y flexible para uso general? Documentación
También usamos UTL_HTTP de manera similar a lo que usted describió. No tengo ninguna experiencia directa con UTL_DBWS, por lo que espero que pueda seguir con cualquier información / experiencia que pueda reunir.
@kogus, no, es un diseño bastante bueno para muchas aplicaciones. PL / SQL es un lenguaje de programación completo que se ha utilizado para muchas aplicaciones grandes.
He usado UTL_HTTP
que es simple y funciona. Si enfrenta un desafío con su propio paquete, probablemente pueda encontrar una solución en uno de los muchos paquetes de envoltura alrededor de UTL_HTTP en la red (Google "consume servicios web de pl / sql", lo que lo lleva, por ejemplo, a http: // www. oracle-base.com/articles/9i/ConsumingWebServices9i.php )
La razón por la que nadie está usando UTL_DBWS
es que no es funcional en una base de datos instalada por defecto. Es necesario cargar una tonelada de clases de Java en la base de datos, pero las instrucciones estándar parecen estar defectuosas: el proceso arroja errores de Java a la derecha y a la izquierda y finalmente falla. Parece que muy pocas personas han estado dispuestas a tomarse el tiempo para rastrear las dependencias del paquete a fin de que este enfoque funcione.
Tuve este desafío y encontré e instalé el paquete ''API SOAP'' que Sten sugiere en Oracle-Base. Proporciona una buena funcionalidad de creación de sobre en UTL_HTTP.
Sin embargo, hubo algunas limitaciones que se relacionan con su pregunta. SOAP_API supone que todas las solicitudes son simples XML, es decir, solo una jerarquía de etiquetas de capa.
Extendí el paquete SOAP_API para permitir que el código del cliente inserte arbitrariamente una etiqueta adicional. De modo que puede insertar un subnivel como, continuar compilando la solicitud y recordar insertar una etiqueta de cierre.
El problema del espacio de nombres era un oso para el proyecto: diferentes niveles de XML tenían diferentes espacios de nombres.
Una buena herramienta de depuración que utilicé es TCP Trace de Pocket Soap. www.pocketsoap.com/tcptrace/ Lo configura como un proxy y observa los objetos de solicitud y respuesta HTTP entre el código del cliente y el del servidor.
Habiendo dicho todo eso, realmente nos gusta tener un cliente SOAP en la base de datos, tenemos acceso completo a todos los datos y al código PLSQL existente, podemos recorrer fácilmente los cursores y llamar a la aplicación externa a través de SOAP cuando sea necesario. Fue mucho más rápido y fácil que implementar un nivel intermedio con muchos códigos Java o .NET personalizados. Buena suerte y avíseme si desea ver mi código API SOAP mejorado.
Mira esta publicación anterior . Tengo que estar de acuerdo con la respuesta número 1 de esa publicación; es difícil imaginar un escenario donde este podría ser un buen diseño.
¿No puedes escribir un servicio, o una aplicación independiente, que hablaría con una tabla en tu base de datos? Entonces podrías implementar lo que quieras como disparador en esa mesa.