如何在 mule 中获取值形式的调用属性?

How to get a value form invocation properties in mule?

我试图从 Mule 的 Message.invocationProperties 中获取一个值,但我每次都遇到此异常

ERROR 2015-03-17 14:14:34,145 [[ESR].HTTP_Request_Listener.worker.01] org.mule.exception.CatchMessagingExceptionStrategy: Failed to dispatch message to error queue after it failed to process.  This may cause message loss. Message identification summary here: id=983fb140-cc92-11e4-ab98-e03f49b18f44 correlationId=<not set>, correlationGroup=-1, correlationSeq=-1
org.mule.api.MessagingException: Execution of the expression "message.invocationProperties['id']" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: PostMethod
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:32) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:58) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:94) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:69) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.doProcess(InterceptingChainLifecycleWrapper.java:50) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:69) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.access[=10=]1(InterceptingChainLifecycleWrapper.java:22) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.process(InterceptingChainLifecycleWrapper.java:66) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.MessageProcessorNotificationExecutionInterceptor.execute(MessageProcessorNotificationExecutionInterceptor.java:58) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.MessageProcessorExecutionTemplate.execute(MessageProcessorExecutionTemplate.java:44) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.process(InterceptingChainLifecycleWrapper.java:61) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.exception.TemplateMessagingExceptionStrategy.route(TemplateMessagingExceptionStrategy.java:140) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.exception.TemplateMessagingExceptionStrategy.handleException(TemplateMessagingExceptionStrategy.java:46) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.exception.ChoiceMessagingExceptionStrategy.handleException(ChoiceMessagingExceptionStrategy.java:58) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.HandleExceptionInterceptor.execute(HandleExceptionInterceptor.java:37) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.HandleExceptionInterceptor.execute(HandleExceptionInterceptor.java:14) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.BeginAndResolveTransactionInterceptor.execute(BeginAndResolveTransactionInterceptor.java:54) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.ResolvePreviousTransactionInterceptor.execute(ResolvePreviousTransactionInterceptor.java:44) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.SuspendXaTransactionInterceptor.execute(SuspendXaTransactionInterceptor.java:50) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.ValidateTransactionalStateInterceptor.execute(ValidateTransactionalStateInterceptor.java:40) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.IsolateCurrentTransactionInterceptor.execute(IsolateCurrentTransactionInterceptor.java:41) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.ExternalTransactionInterceptor.execute(ExternalTransactionInterceptor.java:48) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.RethrowExceptionInterceptor.execute(RethrowExceptionInterceptor.java:28) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.RethrowExceptionInterceptor.execute(RethrowExceptionInterceptor.java:13) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.TransactionalErrorHandlingExecutionTemplate.execute(TransactionalErrorHandlingExecutionTemplate.java:109) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.AsyncResponseFlowProcessingPhase.runPhase(AsyncResponseFlowProcessingPhase.java:46) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.AsyncResponseFlowProcessingPhase.runPhase(AsyncResponseFlowProcessingPhase.java:23) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.PhaseExecutionEngine$InternalPhaseExecutionEngine.phaseSuccessfully(PhaseExecutionEngine.java:65) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.PhaseExecutionEngine$InternalPhaseExecutionEngine.phaseSuccessfully(PhaseExecutionEngine.java:69) ~[mule-core-3.6.0.jar:3.6.0]
    at com.mulesoft.mule.throttling.ThrottlingPhase.runPhase(ThrottlingPhase.java:175) ~[mule-module-throttling-ee-3.6.0.jar:3.6.0]
    at com.mulesoft.mule.throttling.ThrottlingPhase.runPhase(ThrottlingPhase.java:1) ~[mule-module-throttling-ee-3.6.0.jar:3.6.0]
    at org.mule.execution.PhaseExecutionEngine$InternalPhaseExecutionEngine.process(PhaseExecutionEngine.java:114) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.PhaseExecutionEngine.process(PhaseExecutionEngine.java:41) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.MuleMessageProcessingManager.processMessage(MuleMessageProcessingManager.java:32) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.module.http.internal.listener.DefaultHttpListener.handleRequest(DefaultHttpListener.java:124) ~[mule-module-http-3.6.0.jar:3.6.0]
    at org.mule.module.http.internal.listener.grizzly.GrizzlyRequestDispatcherFilter.handleRead(GrizzlyRequestDispatcherFilter.java:55) ~[mule-module-http-3.6.0.jar:3.6.0]
    at org.glassfish.grizzly.filterchain.ExecutorResolver.execute(ExecutorResolver.java:119) ~[grizzly-framework-2.3.16.jar:2.3.16]
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) ~[grizzly-framework-2.3.16.jar:2.3.16]
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) ~[grizzly-framework-2.3.16.jar:2.3.16]
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) ~[grizzly-framework-2.3.16.jar:2.3.16]
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) ~[grizzly-framework-2.3.16.jar:2.3.16]
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) ~[grizzly-framework-2.3.16.jar:2.3.16]
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) ~[grizzly-framework-2.3.16.jar:2.3.16]
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) ~[grizzly-framework-2.3.16.jar:2.3.16]
    at org.mule.module.http.internal.listener.grizzly.ExecutorPerServerAddressIOStrategy.run0(ExecutorPerServerAddressIOStrategy.java:102) ~[mule-module-http-3.6.0.jar:3.6.0]
    at org.mule.module.http.internal.listener.grizzly.ExecutorPerServerAddressIOStrategy.access0(ExecutorPerServerAddressIOStrategy.java:30) ~[mule-module-http-3.6.0.jar:3.6.0]
    at org.mule.module.http.internal.listener.grizzly.ExecutorPerServerAddressIOStrategy$WorkerThreadRunnable.run(ExecutorPerServerAddressIOStrategy.java:125) ~[mule-module-http-3.6.0.jar:3.6.0]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [?:1.7.0_21]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [?:1.7.0_21]
    at java.lang.Thread.run(Thread.java:722) [?:1.7.0_21]
Caused by: org.mule.api.expression.ExpressionRuntimeException: Execution of the expression "message.invocationProperties['id']" failed.
    at org.mule.el.mvel.MVELExpressionLanguage.evaluateInternal(MVELExpressionLanguage.java:202) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.el.mvel.MVELExpressionLanguage.evaluate(MVELExpressionLanguage.java:154) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.el.mvel.MVELExpressionLanguage.evaluate(MVELExpressionLanguage.java:133) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.evaluate(DefaultExpressionManager.java:215) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.match(DefaultExpressionManager.java:476) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.util.TemplateParser.parse(TemplateParser.java:149) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.util.TemplateParser.parse(TemplateParser.java:126) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.parse(DefaultExpressionManager.java:472) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.parse(DefaultExpressionManager.java:431) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.api.processor.LoggerMessageProcessor.log(LoggerMessageProcessor.java:88) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.api.processor.LoggerMessageProcessor.process(LoggerMessageProcessor.java:67) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) ~[mule-core-3.6.0.jar:3.6.0]
    ... 51 more
Caused by: org.mule.mvel2.PropertyAccessException: [Error: null pointer: message.invocationProperties['id']]
[Near : {... message.invocationProperties[' ....}]
             ^
[Line: 1, Column: 1]
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:434) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:140) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.ast.ASTNode.optimize(ASTNode.java:159) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:115) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.MVELRuntime.execute(MVELRuntime.java:86) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.compiler.CompiledExpression.getDirectValue(CompiledExpression.java:123) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:119) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:113) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.MVEL.executeExpression(MVEL.java:943) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.el.mvel.MVELExpressionExecutor.execute(MVELExpressionExecutor.java:72) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.el.mvel.MVELExpressionLanguage.evaluateInternal(MVELExpressionLanguage.java:198) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.el.mvel.MVELExpressionLanguage.evaluate(MVELExpressionLanguage.java:154) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.el.mvel.MVELExpressionLanguage.evaluate(MVELExpressionLanguage.java:133) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.evaluate(DefaultExpressionManager.java:215) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.match(DefaultExpressionManager.java:476) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.util.TemplateParser.parse(TemplateParser.java:149) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.util.TemplateParser.parse(TemplateParser.java:126) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.parse(DefaultExpressionManager.java:472) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.parse(DefaultExpressionManager.java:431) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.api.processor.LoggerMessageProcessor.log(LoggerMessageProcessor.java:88) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.api.processor.LoggerMessageProcessor.process(LoggerMessageProcessor.java:67) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) ~[mule-core-3.6.0.jar:3.6.0]
    ... 51 more
Caused by: java.lang.NullPointerException
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:363) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:140) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.ast.ASTNode.optimize(ASTNode.java:159) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:115) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.MVELRuntime.execute(MVELRuntime.java:86) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.compiler.CompiledExpression.getDirectValue(CompiledExpression.java:123) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:119) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:113) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.mvel2.MVEL.executeExpression(MVEL.java:943) ~[mule-mvel2-2.1.9-MULE-005.jar:?]
    at org.mule.el.mvel.MVELExpressionExecutor.execute(MVELExpressionExecutor.java:72) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.el.mvel.MVELExpressionLanguage.evaluateInternal(MVELExpressionLanguage.java:198) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.el.mvel.MVELExpressionLanguage.evaluate(MVELExpressionLanguage.java:154) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.el.mvel.MVELExpressionLanguage.evaluate(MVELExpressionLanguage.java:133) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.evaluate(DefaultExpressionManager.java:215) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.match(DefaultExpressionManager.java:476) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.util.TemplateParser.parse(TemplateParser.java:149) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.util.TemplateParser.parse(TemplateParser.java:126) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.parse(DefaultExpressionManager.java:472) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.expression.DefaultExpressionManager.parse(DefaultExpressionManager.java:431) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.api.processor.LoggerMessageProcessor.log(LoggerMessageProcessor.java:88) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.api.processor.LoggerMessageProcessor.process(LoggerMessageProcessor.java:67) ~[mule-core-3.6.0.jar:3.6.0]
    at org.mule.execution.ExceptionToMessagingExceptionExecutionInterceptor.execute(ExceptionToMessagingExceptionExecutionInterceptor.java:24) ~[mule-core-3.6.0.jar:3.6.0]
    ... 51 more

这就是我正在做的事情:

<catch-exception-strategy doc:name="Catch Exception Strategy" when="#[exception.causedBy(java.lang.Exception)]">
        <set-payload value="#[app.registry.messageBean.messageProcessFailed(message.invocationProperties['id'],'Failed To Route Packet. Retries Exhausted.')]" />
        <jms:outbound-endpoint connector-ref="jms-connector" ref="FailedMessageQueue"/>
    </catch-exception-strategy>

当您通过 MEL 访问 'message' 时,您正在访问 http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/el/context/MessageContext.html

调用属性不可通过消息上下文使用,但可通过流变量访问。要从 MEL 访问调用范围的属性,请使用 #[flowVars.id]

Ryan 说的是对的..但您也可以使用以下 MEL 访问调用范围的属性:-

#[flowVars['id']]