2010-07-08 6 views
0

J'ai une instance de Mule qui est configurée pour traiter les réponses XML d'un fournisseur tiers. Récemment, le fournisseur est passé à une nouvelle révision et a donc modifié la réponse xml. Maintenant, j'ai besoin d'un moyen d'identifier si la réponse est une implémentation v1 ou v2 et d'appeler le point de terminaison approprié de mon côté pour traiter la réponse.Comment filtrer le routage sortant à l'aide de Mule ESB?

Ce que j'est actuellement:

<service name="processResponse"> 
... 
    <outbound> 
     <pass-through-router> 
      <cxf:outbound-endpoint address="..." clientClass="..." wsdlPort="..." wsdlLocation="..." operation="..."/> 
     </pass-through-router> 
    </outbound> 
</service> 

Je préférerais ajouter un filtre à mule pour identifier la révision de la 3e partie (peut-être par l'espace de noms XML dans la réponse), puis appeler le approprié classe. Je ne trouve pas de bons exemples de cela. Est-ce que quelqu'un peut donner un exemple de la façon dont cela pourrait être résolu?

Répondre

1

Jetez un coup d'œil à this example, où une transformation de version est démontrée.

0

Je soupçonne que le moyen le plus direct est une route filtrée utilisant un filtre xpath. Définissez d'abord les services vm pour chaque version. Ensuite, vous allez les filtrer via un service avec le point de terminaison sortant suivant. Une prise tout est toujours une bonne idée.

<outbound> 
    <filtering-router> 
    <vm:outbound-endpoint ref="Version1"/> 
    <expression-filter evaluator="jxpath" expression="/your/version1/xpath/descriminator"/> 
    </filtering-router> 
    <filtering-router> 
    <vm:outbound-endpoint ref="Version2"/> 
    <expression-filter evaluator="jxpath" expression="/your/version2/xpath/descriminator"/> 
    </filtering-router> 
    <forwarding-catch-all-strategy> 
    <stdio:outbound-endpoint system="ERR"/> 
    </forwarding-catch-all-strategy> 
</outbound> 
Questions connexes