2008-09-01 35 views
9

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.Consumir servicios web desde Oracle PL/SQL

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? Documentation

Respuesta

5

He usado UTL_HTTP que es simple y funciona. Si enfrenta un desafío con su propio paquete, probablemente encuentre 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 le lleva a eg 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 derecha e 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.

-2

Echa un vistazo a este older post. 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.

+0

La respuesta # 1 es instrucciones para hacer eso en dotNet. No es realmente relevante. ¿Te refieres al comentario de Orion Edwards del 29 de agosto? Recuerde, las respuestas pueden moverse hacia arriba o hacia abajo en la lista a medida que las personas las clasifican. –

1

También hemos usado UTL_HTTP de manera similar a lo que usted ha descrito. 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.

2

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 una carga para el proyecto: los 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.

Dicho todo esto, nos gusta tener un cliente SOAP en la base de datos: tenemos acceso completo a todos los datos y código PLSQL existente, podemos recorrer fácilmente los cursores y llamar a la aplicación externa mediante 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.

Cuestiones relacionadas