2012-05-03 11 views
0

originalPayloadはgroovy式でmessage.originalPayloadと同じことをしていません。 originalPayloadoriginalPayloadはgroovyスクリプトのmessage.originalPayloadと同じではありません

:それは、次の変圧器は、同じことをしない、ある

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

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

次ラバの設定とテストケースを再現するために使用することができます問題:

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

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

     <expression-transformer evaluator="groovy" expression="originalPayload" /> 
     <!-- or alternatively --> 
     <!-- <expression-transformer evaluator="groovy" expression="message.originalPayload" /> --> 
    </flow> 
</mule> 

テストケースc :

@Test 
public void transformers() throws MuleException { 
    final MuleClient client = muleContext.getClient(); 
    final MuleMessage reply = client.send("vm://test.Path", 1, null, RECEIVE_TIMEOUT); 
    assertEquals(1, reply.getPayload()); 
} 

message.originalPayloadの代替案は期待どおりに機能します。 originalPayloadとの1がないと、次の例外がログに示されている:私は間違って

Exception stack is: 
1. Expression Evaluator "groovy" with expression "originalPayload" returned null 
but a value was required. (org.mule.api.expression.RequiredValue Exception) 

をやって何ができますか?

ありがとうございました。

答えて

1

問題は、expression-transformerscripting:transformerscripting:componentで使用されるものよりもバインディングの異なるセットを使用することであり、これはそれらがorg.mule.module.scripting.component.Scriptableに異なるメソッドを呼び出すため。

originalPayloadがバインドされますときまた、それは間違った値である。したがって

bindings.put("originalPayload", event.getMessage().getPayload()); 

MULE-6215

0

Scripting Module Referenceに続いて、それらは同じである必要があります。

また、スクリプトモジュールでorg.mule.module.scripting.component.Scriptableを調べると、「originalPayload」がmessage.getPayloadであることがわかります。

エラーを再現する小さなプロジェクトを投稿できますか?

public void populateBindings(Bindings bindings, MuleMessage message) 
{ 
    populateDefaultBindings(bindings); 
    if (message == null) 
    { 
     message = new DefaultMuleMessage(NullPayload.getInstance(), muleContext); 
    } 
    bindings.put("message", message); 
    //This will get overwritten if populateBindings(Bindings bindings, MuleEvent event) is called 
    //and not this method directly. 
    bindings.put("payload", message.getPayload()); 
    //For backward compatability 
    bindings.put("src", message.getPayload()); 
} 

public void populateBindings(Bindings bindings, MuleEvent event) 
{ 
    populateBindings(bindings, event.getMessage()); 
    bindings.put("originalPayload", event.getMessage().getPayload()); 
    bindings.put("payload", event.getMessage().getPayload()); 
    bindings.put("eventContext", new DefaultMuleEventContext(event)); 
    bindings.put("id", event.getId()); 
    bindings.put("flowConstruct", event.getFlowConstruct()); 
    if (event.getFlowConstruct() instanceof Service) 
    { 
     bindings.put("service", event.getFlowConstruct()); 
    } 
} 
+0

ハード私はファイルを投稿するために。私はそれが制限されている環境で働いています。しかし、私はオリジナルの質問に投稿した情報を使ってプロジェクトを簡単に作成することができます。 – beluchin

関連する問題