Question

Je veux construire un proxy:
1. Le service d'appels qui Autorisez et donner suite OK ou échec (1er service)
2. Si un résultat « OK » puis appelez un service

Le problème est, quand le 1er service rendre le message:

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
       <soapenv:Body>
              <result>
                     <status>OK</status>
                     <message></message>
              </result>
       </soapenv:Body>
</soapenv:Envelope>

Et je donne « filtrage » QD séquence. Voici le XML:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestProxy" transports="https,http" statistics="disable" trace="enable" startOnLoad="true">
   <target endpoint="AuthorizationService">
      <outSequence>
         <log level="full" />
         <filter xpath="/result/status='OK'">
            <then>
               <send>
                  <endpoint>
                     <address uri="http://192.168.1.140:8080/axis2/services/TaskService.TaskServiceHttpEndpoint/getTask" />
                  </endpoint>
               </send>
            </then>
            <else>
               <makefault version="soap11">
                  <code xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/" value="soap11Env:VersionMismatch" />
                  <reason value="1" />
                  <role>2</role>
                  <detail>3</detail>
               </makefault>
            </else>
         </filter>
         <log level="full" />
      </outSequence>
   </target>
</proxy>

Quand je lance mon application, l'ESB donne toujours le message:

16:08:59,358 [-] [HttpClientWorker-4] INFO Start : Log mediator 
16:08:59,361 [-] [HttpClientWorker-4] INFO To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:0bc33821-c4f1-448e-a7dc-be4194be8e99, Direction: response, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><result><status>OK</status><message></message></result></soapenv:Body></soapenv:Envelope> 
16:08:59,361 [-] [HttpClientWorker-4] INFO End : Log mediator 
16:08:59,361 [-] [HttpClientWorker-4] INFO Start : Filter mediator 
16:08:59,361 [-] [HttpClientWorker-4] INFO XPath expression : /result/status='OK' evaluates to false - executing the else path child mediators

On dirait que la condition du filtrage est toujours faux.
Quelle est la déclaration correcte pour le XPath dans le filtre?

Était-ce utile?

La solution

Il semble que vous avez donné une mauvaise expression XPath. Vous ne pouvez pas donner un XPath et une expression booléenne tant pour la valeur XPath, à savoir qu'il ne peut pas être « / résultat / status = « OK » », mais doit être « / résultat / état ». Ensuite, en fonction de votre séquence, il déclenche la section après alors, si cet élément est présent. Depuis, vous devez évaluer une condition booléenne et sur la base XPath, je vais vous présenter une alternative basée sur le médiateur de commutation (La même chose peut être fait pour le filtre en définissant une propriété):

<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestProxy" transports="https,http" statistics="disable" trace="enable" startOnLoad="true">
   <target endpoint="AuthorizationService">
      <outSequence>
         <log level="full" />
         <switch source="//result/status">
            <case regex="OK">
               <send>
                  <endpoint>
                     <address uri="http://192.168.1.140:8080/axis2/services/TaskService.TaskServiceHttpEndpoint/getTask" />
                  </endpoint>
               </send>
            </case>
            <default>
               <makefault version="soap11">
                  <code xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/" value="soap11Env:VersionMismatch" />
                  <reason value="1" />
                  <role>2</role>
                  <detail>3</detail>
               </makefault>
            </default>
         </switch>
         <log level="full" />
      </outSequence>
   </target>
</proxy>

Autres conseils

La configuration proxy doit être présente comme suit

<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestProxy" transports="https,http"      statistics="disable" trace="enable" startOnLoad="true">
    <target endpoint="AuthorizationService">
      <outSequence>
         <log level="full"/>
         <filter source="/result/status" regex="ok">
            <then>
               <send>
                  <endpoint>
                     <address uri="http://192.168.1.140:8080/axis2/services/TaskService.TaskServiceHttpEndpoint/getTask"/>
                  </endpoint>
               </send>
            </then>
            <else>
               <makefault version="soap11">
                  <code xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/" value="soap11Env:VersionMismatch"/>
                  <reason value="1"/>
                  <role>2</role>
                  <detail>3</detail>
               </makefault>
               <send/>
            </else>
         </filter>
       </outSequence>
   </target>
   <description></description>
</proxy>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top