OSB : une autre façon de gérer les codes retours HTTP en REST

Présentation du problème

Dans cet article, Julien nous montre un moyen de gérer les codes retours HTTP.
Cette méthode est intéressante quand on passe directement par les connecteurs HTTP (et pas par la palette REST d’OSB).
Pour compléter, voici une autre méthode qui s’appuie directement sur les outils REST d’Oracle.

Création du projet

L’exemple sera un projet qui, pour un code postal, renvoie la commune associée.
Les erreurs seront :
– 404 Not Found : aucune commune ne correspond au code postal
– 406 Not Acceptable : le code postal n’est pas valide
– 500 Internal Server Error : plantage technique durant le traitement

Définition des erreurs

On commence par créer une XSD qui associera un élément spécifique par erreur.
schéma XSD des erreurs
Il est important de bien avoir un type différent par erreur. En effet, au moment de renvoyer la réponse, OSB regardera l’élément fourni et fera correspondre le code retour en conséquence.
Il faut éviter les élément vides. Cela provoque (parfois) des erreurs « unmarshalling » qui sont pénibles à traiter. Donc, penser à mettre du contenu, même minimaliste, pour être tranquille.

Création du pipeline et du WSDL

Dans une autre XSD, on déclare les formats d’entrée/sortie nominaux de type texte.
Ici, en entrée le code postal, en sortie le nom de la ville.
Ensuite on crée un pipeline de type WSDL :
création du pipeline WSDL
création du WSDL sans gestion des erreurs
Attention : On ne place pas les erreurs dans le WSDL à ce stade. Sinon OSB risque d’avoir du mal à gérer les retours.
extrait du WSDL sans gestion des erreurs

Exposition en tant que REST

Une fois le contrat défini, on expose le service en tant que REST.
Dans le partie réponse, on rajoute la gestion les erreurs en référant le type et le code d’erreur associés.
vue globale des erreurs REST
ajout d'une erreur REST
Si l’on ouvre le WADL généré, on retrouve nos erreurs avec pour chaque code retour le type d’erreur associé et la référence vers le WSDL.
configuration des erreurs dans le WADL
(OSB remonte des avertissements sur les éléments en réponse. Pour une raison inconnue, JDeveloper n’arrive pas à retrouver les objets même correctement définis. Cela n’empêche pas le déploiement et l’exécution correcte du flux.)
Si on ouvre le WSDL, on voit qu’il a été mis à jour avec l’ajout des erreurs.
WSDL mise-à-jour avec les erreurs

Gestion des codes retours

Maintenant, il reste à définir dans le process les conditions qui déclenchent les exceptions.

Création de l’erreur

Par exemple, dans cas où le code n’est pas valide, on remplit un body au format correspondant à l’erreur 406.
création d'une réponse en erreur
Il est important de garder le format du bloc « Fault » comme cela pour éviter qu’OSB le traite correctement.
A l’intérieur du bloc « detail », on ajoute notre erreur.
Pour les autres erreurs, on applique la même logique en adaptant l’erreur.

Application du code retour

Il reste à indiquer à OSB que le retour est en erreur.
Pour cela, il suffit de mettre un « Reply failure ».
Reply failure
Sachant qu’il s’agit d’une erreur, OSB va automatiquement assigner le code retour en fonction du type d’erreur défini juste au-dessus.

Tests

On peut maintenant tester les cas et voir les erreurs attendues

Pas d’erreur

réponse sans erreur

Code postal incohérent : 406

Code postal incohérent 406

Code postal inconnu : 404

Code postal inconnu 404

Erreur technique : 500

Erreur technique 500

Références

Maîtriser le code de réponse HTTP renvoyé par l’OSB : Article de Julien sur les codes retours HTTP
List of HTTP status codes : Liste des codes retours HTTP
SBTestRestHttpCode : Projet Oracle de retour HTTP en REST