2013-10-15 1 views
0

Salut, je suis nouveau à mule et le développement de projet de mule pour la première fois, S'il vous plaît aidez-moi. Dans mon flux principal, j'ai mis en place où j'ai capturé la charge utile originale, par la façon dont je dois appeler un service, si le service est en panne ou quelque chose qu'il doit réessayer 3 fois (donc utilisé jusqu'à succès). quand il est épuisé, il doit passer par le second flux. Quel que soit l'échec, il doit enregistrer uniquement la charge utile d'origine dans la file d'attente du second flux. J'essaie donc d'accéder à flowVars dans le processeur setpayload. Mais je reçois une erreur comme - [Erreur: impossible d'accéder: originalPayload; en classe: org.mule.el.context.MessagePropertyMapContext] [Near: {... flowVars.originalPayload ....}]. S'il vous plaît trouver ma config xmlImpossible d'accéder à flowVars (MEL) quand il est acheminé jusqu'à processeur de message dans Mule ESB

<spring:beans> 
    <spring:bean id="objectStore" class="org.mule.util.store.SimpleMemoryObjectStore"></spring:bean> 
</spring:beans> 
<vm:endpoint exchange-pattern="one-way" path="path" name="VM" doc:name="VM"></vm:endpoint> 
<flow name="Flow1" doc:name="Flow1"> 
    <file:inbound-endpoint path="C:\Users\Star Jothi\Desktop\Mule\FilePath1" responseTimeout="10000" doc:name="File"/> 

    <byte-array-to-string-transformer doc:name="Byte Array to String"></byte-array-to-string-transformer> 
    <set-variable variableName="originalPayload" value="#[payload]" doc:name="Variable"/> 
    <set-payload value="#['hi']" doc:name="Set Payload"/> 
    <flow-ref name="Flow2" doc:name="Flow Reference"/> 

</flow> 
<flow name="Flow2" doc:name="Flow2"> 
    <cxf:proxy-client payload="body" enableMuleSoapHeaders="true" doc:name="SOAP"/> 
    <until-successful objectStore-ref="objectStore" maxRetries="2" secondsBetweenRetries="2" deadLetterQueue-ref="VM" doc:name="Until Successful"> 
     <http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="test" method="POST" doc:name="HTTP"/> 
    </until-successful> 
</flow> 
<flow name="Flow3" doc:name="Flow3"> 
    <vm:inbound-endpoint exchange-pattern="one-way" path="path" doc:name="VM"></vm:inbound-endpoint> --> 
    <set-payload value="#[flowVars.originalPayload]" doc:name="Set Payload"></set-payload> 
    <logger message="****#[payload]******" level="INFO" doc:name="Logger"></logger> 
</flow> 

Veuillez me suggérer comment accéder flowVars et obtenir la charge utile d'origine lors de l'utilisation jusqu'à ce que le processeur avec succès.

+0

De quelle version s'agit-il? – Seba

+2

Pourquoi avoir un 'flow-ref' après' until-successful': ne voulez-vous pas que 'Flow2' soit appelé uniquement en cas d'échec? En outre, dans 'Flow2', utilisez le point de terminaison VM déclaré globalement au lieu de le déclarer de nouveau:' ' –

+0

@DavidDossot -Puisque mon flux est très important, je l'ai simplifié. S'il vous plaît trouver mon flux édité maintenant. J'ai déclaré que la session était réalisable, cela fonctionne bien. Mais à votre tour, comme vous avez suggéré si je garde dans le flux 3 obtenir une erreur d'exécution comme - "Contenu invalide a été trouvé en commençant par l'élément 'vm: endpoint". Veuillez suggérer. – star

Répondre

2

Premier point:

flowVars are accessd in the flow by using #[flowVars['originalPayload']] 

Deuxième point:

flowVars are lost from the Mule Message when the message crosses an endpoint. 

Troisième point:

Until Successful is Asynchronous. So irrespective of the success of Until-Successful and HTTP outbound in First flow the Flow2 is going to get executed. 

Dans votre scénario, vous pouvez utiliser le sortant HTTP et la combinaison Flow2 en première réussie routeur.

Remarque: La première tentative réussie ne réessayera pas.

Espérons que cela aide.

+0

Ouais ça aide.Merci. Cela fonctionne bien en déclarant comme variable de session. – star

Questions connexes