Custom XPath : Do it *again* yourself ! – SOA-Suite 11g – Part1 – Mapper

Vous avez aimé Custom XPath : Do it yourself!.
Vous n’attendiez plus qu’une adaptation à la SOA-Suite.
Vous voilà servi !
Cet article vient donc compléter un précédent article qui s’orientait sur l’OSB Custom XPath : Do it yourself!. Cette fois-ci c’est sur les briques de la SOA-Suite que l’on va se pencher.

Cette première partie va s’orienter sur la mise en place de fonctions XPath pouvant être utilisées dans le mapper.
Une seconde partie s’orientera, elle, sur la mise en place de fonctions utilisables directement dans les composants de la SOA-Suite (BPEL, Mediator…).

Implémentation de la fonction XPath

Création du projet JDeveloper

  • Créer une application « Generic Application »
  • Créer un projet « Generic Project » et ajoutez dans son « Technology Scope » (Project properties…) la technologie Java.

Implémentation de la classe Java

Pour implémenter une fonction utilisable dans le mapper, aucune interface particulière n’est nécessaire pour notre classe. La méthode à implémenter doit uniquement être « public static ».

package custom.xpath.easyteam;
public class XPathMapperEasyteam {
    public XPathMapperEasyteam() {
        super();
    }
    public static String makeItEasier(String input){
        return "easy"+input;
    }
}

Ici on aura donc implémenté une méthode makeItEasier qui concaténera « easy » à l’input fournie.

Préparation du fichier de configuration

Pour la mise en place d’une fonction dans le mapper, il est nécessaire de configurer dans un XML son nom, son namespace, la classe d’implémentation, les paramètres…
Ce fichier devra forcément :

  • Se nommer ext-mapper-xpath-functions-config.xml
  • Définir pour namespace http://www.oracle.com/XSL/Transform/java/{package}.{className}
 <soa-xpath-functions version="11.1.1"
                     xmlns="http://xmlns.oracle.com/soa/config/xpath"
                     xmlns:easy="http://www.oracle.com/XSL/Transform/java/custom.xpath.easyteam.XPathMapperEasyteam">
   <function name="easy:makeItEasier">
      <className>custom.xpath.easyteam.XPathMapperEasyteam</className>
      <return type="string"/>
      <params>
         <param name="value" type="string"/>
      </params>
      <desc>Description de la fonction</desc>
      <detail>
         <![CDATA[Cette fonction concatène "easy" au début de son input]]>
      </detail>
   </function>
</soa-xpath-functions>

A noter qu’il est existe différents types pour les paramètres d’entrée et de retour :

Type précisé dans la configuration XML Type Java équivalent
string java.lang.String
boolean boolean
number int, float or double
node-set oracle.xml.parser.v2.XMLNodeList
tree oracle.xml.parser.v2.XML

Packaging

Il est nécessaire de faire un JAR afin de pouvoir rendre la fonction accessible à JDeveloper et/ou le serveur SOA.
Ce packaging peut se faire via les « Deployment Profiles » de JDeveloper. L’essentiel est qu’il contienne le code compilé, ainsi que les fichiers de configuration dans le dossier META-INF.

[

Arborescence du JAR à obtenir

Mise en place dans JDeveloper et le serveur

Pour permettre l’utilisation de cette fonction fraichement développée, il va falloir la mettre à disposition de JDeveloper, puis du serveur SOA.

Enregistrer sous JDeveloper

Pour enregistrer le JAR et que les fonctionnalités soient disponibles sous JDeveloper, il faut positionner ajouter le jar dans les configurations SOA.
Pour y accéder, il faut aller dans le menu « Tools » puis « Preferences ».
Se rendre dans la partie SOA et ajouter le JAR.

[

Il faut ensuite redémarrer JDeveloper.
Au redémarrage, vous pourrez observer lorsque vous êtes sur une transformation que votre fonction apparait dans la liste des fonction « User Defined ».

[

On peut ensuite faire glisser cette fonction (ou l’utiliser dans le source) et tester qu’elle se comporte correctement.

[

Enregistrer sous le serveur SOA

Pour permettre l’utilisation au runtime sur le serveur, il est également nécessaire de mettre en place le jar sur le serveur.
Pour cela copier le fichier jar dans le dossier $ORACLE_SOA_HOME/Oracle_SOA1/soa/modules/soa_ext_11.1.1
On peut ensuite lancer la commande (en étant positionné dans le dossier précédent)

ant build.xml

S’il n’est pas possible d’utiliser ANT, modifier manuellement le fichier MANIFEST.MF du jar oracle.soa.ext.jar pour ajouter notre JAR au classpath :
Class-Path: xpath-easyteam.jar classes/
Cette étape n’est nécessaire qu’une fois si l’on réutilise le même jar.
Redémarrer le serveur SOA pour prendre en compte le JAR.
Il faudra d’ailleurs le redémarrer dès qu’on souhaitera prendre en compte de nouvelles fonctions ou modification sur des existantes.
Il suffit alors de déployer le composite que l’on avait testé et de le tester via l’EM pour observer que la fonction a bien été prise en compte.

Conclusion

A présent il est possible de pallier à certaines limites du mapper, et vous serez capable de vous sortir de presque toutes les situations.
Cependant le mot d’ordre reste d’utiliser l’existant : il ne sert à rien de tout re-développer,  la plupart des besoins sont couverts. Mais cela pourra un jour vous dépanner.
Dans un prochain article on abordera les fonctions XPath utilisables dans les différents composants : Mediator, BPEL…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *