La consommation de services web à partir d'Oracle PL/SQL
Notre application est à l'interface avec beaucoup de services web ces jours-ci. Nous avons notre propre paquet que quelqu'un a écrit quelques années en arrière à l'aide de UTL_HTTP et il fonctionne, en général, mais a besoin d'un codage en dur de l'enveloppe SOAP à travailler avec certains systèmes. Je voudrais le rendre plus générique, mais le manque d'expérience pour savoir comment de nombreux scénarios que j'aurais à traiter. Les variations sont dans les espaces de noms doivent être déclarées et le format des éléments. Nous avons à gérer deux appels simples avec un peu de paramètres et de ceux qui passent une grande quantité de données dans une chaîne codée.
Je sais que 10g a UTL_DBWS, mais il n'y a pas un grand nombre de cas d'utilisation en ligne. Il est stable et assez souple pour une utilisation générale? La Documentation
OriginalL'auteur steevc | 2008-09-01
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé
UTL_HTTP
qui est simple et qui fonctionne. Si vous faites face à un défi avec votre propre forfait, vous pouvez probablement trouver une solution dans l'un des nombreux wrapper paquets autour de UTL_HTTP sur le net (Google, "la consommation de services web à partir de pl/sql", qui vous mène par exemplehttp://www.oracle-base.com/articles/9i/ConsumingWebServices9i.php)
La raison, personne n'est à l'aide de
UTL_DBWS
est qu'il n'est pas fonctionnel dans une installée par défaut de la base de données. Vous devez charger une tonne de classes Java dans la base de données, mais les instructions standard semble être défectueux - le processus vomit Java erreurs droite et à gauche, échoue finalement. Il semble que très peu de gens sont disposés à prendre le temps pour traquer les dépendances du paquet pour que cette approche fonctionne.OriginalL'auteur Sten Vesterli
J'ai eu ce défi et trouvé et installé le "SOAP API" package Sten suggère sur Oracle-Base. Il fournit quelques bonnes enveloppe de création de la fonctionnalité sur le dessus de UTL_HTTP.
Cependant il y avait quelques limites qui se rapportent à votre question. SOAP_API suppose que toutes les demandes sont simples XML - c'est à dire d'une seule couche de la balise de la hiérarchie.
J'ai étendu la SOAP_API paquet afin de permettre au client de code arbitraire insérer une balise supplémentaire. Ainsi, vous pouvez insérer un sous-niveau , continuer à construire la demande, et n'oubliez pas d'insérer une balise de fermeture.
L'espace de noms en question était un ours pour le projet - les différents niveaux de XML a des espaces de noms différents.
Un bel outil de débogage que j'ai utilisé est TCP Trace de Poche Savon.
http://www.pocketsoap.com/tcptrace/
Vous définissez comme un proxy et de regarder la demande et la réponse HTTP objets entre le client et le code serveur.
Après avoir dit tout cela, on a vraiment l'impression d'avoir un SAVON client dans la base de données - nous avoir un accès complet à toutes les données existantes et PLSQL code, peuvent facilement faire une boucle à travers les curseurs et d'appeler l'app externe via SOAP en cas de besoin. Il a été beaucoup plus rapide et plus facile que le déploiement d'un niveau intermédiaire avec beaucoup de Java personnalisé ou .NET code. Bonne chance et laissez-moi savoir si vous aimeriez voir amélioré mon API SOAP de code.
OriginalL'auteur Rob McCauley
Nous avons également utilisé UTL_HTTP une manière similaire à ce que vous avez décrit. Je n'ai pas d'expérience directe avec les UTL_DBWS, donc j'espère que vous pouvez suivre avec toute l'information/l'expérience, vous pouvez rassembler.
@kogus, non, c'est une très bonne conception pour de nombreuses applications. PL/SQL est un véritable langage de programmation qui a été utilisé pour beaucoup de grosses applications.
OriginalL'auteur Mark Harrison
Découvrez ce vieux poste. Je suis d'accord avec ce post #1 réponse; il est difficile d'imaginer un scénario où cela pourrait être un bon design.
Ne pouvez pas vous écrire un service ou d'une application autonome, qui serait de parler à une table dans votre base de données? Ensuite, vous pouvez mettre en œuvre ce que vous voulez comme un trigger sur la table.
OriginalL'auteur JosephStyons