¿Cuál es el alcance de un mensaje de mula?

Al tratar de restaurar la carga útil original en un mensaje, me encontré con este problema que me confundió con respecto al alcance de un mensaje de mula. Dada la configuración de mula a continuación, inicialmente asumí que la carga útil recibida en el test.Name vm endpoint iba a ser restaurado al final del flujo (ver 1. y 2. en la configuración):

<mule  ...>     
    <vm:endpoint name="replacePayloadWithFoo.Name"
            path="replacePayloadWithFoo.Path" />

    <flow name="test">
        <vm:inbound-endpoint name="test.Name" path="test.Path"
            exchange-pattern="request-response" />

        <!-- 1. Down below, I wanted to restore the payload at this point -->

        <expression-transformer evaluator="string"
            expression="bar" />

        <outbound-endpoint ref="replacePayloadWithFoo.Name"
            exchange-pattern="request-response" />

        <!-- 2. The transformer below does not restore the payload at 1. -->            

        <expression-transformer evaluator="groovy"
                expression="message.originalPayload" />
    </flow>

    <flow name="replacePayloadWithFoo">
        <inbound-endpoint ref="replacePayloadWithFoo.Name"
            exchange-pattern="request-response" />

        <expression-transformer evaluator="string"
            expression="foo" />

    </flow>

</mule>

Sin embargo, parecía como si el mensaje que entró en el test flujo terminó en el replacePayloadWithFoo punto final de salida. El transformador en 2. sale "foo" como la carga útil.

¿Cuál es el alcance del mensaje de la mula?

De paso, el documentación de referencia de secuencias de comandos indica que hay un enlace para originalPayload en guiones maravillosos. Sin embargo, si el transformador en 2. se reemplaza con

<expression-transformer evaluator="groovy" expression="originalPayload" />

Obtengo una excepción:

org.mule.api.expression.RequiredValueException: Expression Evaluator "groovy"
with expression "originalPayload" returned null but a value was required.

¿Cual podría ser el problema?

Muchas Gracias

preguntado el 03 de mayo de 12 a las 14:05

1 Respuestas

Cualquier interacción saliente, a menos que se realice a través de un enriquecedor, afectará el mensaje en curso actual. Por eso, la llamada a replacePayloadWithFoo reemplaza el mensaje original con el resultado de la interacción saliente.

Dicho esto, no puedo explicar la discrepancia entre:

<expression-transformer evaluator="groovy" expression="message.originalPayload" />

y:

<expression-transformer evaluator="groovy" expression="originalPayload" />

porque ambos dependen de:

event.getMessage().getPayload()

contestado el 03 de mayo de 12 a las 16:05

¡Muchas gracias! ¡Tú Molas! ¿podría señalar una página de documentación que profundiza en el tema del alcance del mensaje? Con respecto al problema con originalPayload, ¿le gustaría que publique un ejemplo para ayudar a reproducirlo? - beluchin

No puedo pensar en ninguna página de documento re: alcance del mensaje :( Y sí, abra un nuevo problema para esta discrepancia entre message.originalPayload y originalPayload, vale la pena una mirada más profunda. - david dossot

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.