2015-07-07 12 views
6

'u çağırın Bazı akış değişkenlerini okuyabilecek, bazı toplamaları yapacak ve sonucu başka bir akış değişkeninde zaten var olan bir listeye ekleyecek bir Java yöntemim var.MuleMessage öğesini Mule ile Java yöntemine geçirme

Bu nedenle, yöntem bir MuleMessage bekler. Bunun gibi message MEL değişkeni kullanarak, bir java yöntemine bir MuleMessage geçmek açıkçası mümkün düşündüm:

<invoke object-ref="Aggregator" method="aggregateSingle" methodArguments="#[message]" doc:name="Invoke"/> 

Ama bu yerine MessageContext nesneyi geçtiği ortaya çıktı. Ancak bu sınıfın kullanışlı olmaması için InvocationVariable'u ayarlamam gerekiyor. Ben harika değişkenleri kurdum biliyorum, bu yüzden belki de bu (düşündüm) çalışacak:

<invoke object-ref="Aggregator" method="aggregateSingle" methodArguments="#[groovy:message]" doc:name="Invoke"/> 

Ama hayır, bu şekilde payload yerine MuleMessage geçer.

Bunu yapmamın tek yolu, onu aşağıdaki gibi bir Groovy bileşeninde aramaktır. Yani, planladığım gibi, spring:bean'u kullanmak yerine her seferinde yeni bir Toplayıcı nesne oluşturmam gerekiyor.

   <scripting:transformer doc:name="aggregateSingle"> 
        <scripting:script engine="Groovy"><![CDATA[ 
         new com.example.Aggregator().aggregateSingle(message); 
         message 
        ]]></scripting:script> 
       </scripting:transformer> 

invoke kullanarak Java yöntemine bir MuleMessage nesnesi geçirmek için bir yol var mı?

+0

Neden invoke bileşenini kullanmak ve Mule API ile eşleştirmek istiyorsunuz? ... bileşen oluşturmanın iki yolunun olması fikri, bir yolun sizi Mule API'sine bağlaması ve diğerinin de olmamasıdır. – Sudarshan

+0

@Sudarshan Katır kodunu temiz tutmak istiyorum. Akışımda, yayılma-toplama yöntemini ve diğerini sırayla kullanan iki dal var. İkincisi, birincinin AgregationStrategy tarafından üretilen benzer bir nesneyle sonuçlanır. Bu nedenle AggregationStrategy'den işlevselliği tekrar kullanmak istiyorum. Aynı zamanda daha ince taneli testlere izin verir. Sınıfıma neden bir "MuleMessage" (Mule API'sine özgü sınıf) iletmek istediğimi soruyor musunuz? Çünkü 5 ayrı flowVariables geçirmekten daha kolay. – rewolf

+1

sorunuzu + 1'ledi, ancak özellikle 5 yetenek değişkeninin POJO'unu oluşturmayı ve POJO'yu bileşene geçirmeyi düşünürdüm, özellikle de test etme yeteneği ve kodu temizliyorsanız. Bir cevap bekliyorum :) – Sudarshan

cevap

1

Varsayılan olarak mel, ileti değişkenine başvurmak için ileti bağlamını kullanır, bu aslında yalnızca message.payload! = Null gibi genel ifadelere yardımcı olmak içindir (önceki sürümlerinde boş yükü denetlemeniz gerekir)). Ben çağırmak elemanı debug gelmiş ve ne yazık ki hiçbir ifadeler kesmek, ama bu size Bu fasulye başvurmak böylece harika fasulye kayıt defterine doğrudan erişim beklendiği gibi çalışır

<expression-transformer expression="#[groovy: Aggregator.aggregateSingle(message)]" /> 

kullanabilirsiniz eşdeğer yöntemdir adı ve bir bahar fasulyesi olarak saklayın (sahip olmak istediğiniz gibi)

+0

Bu çalıştı, biraz. Kesinlikle işe yaramalı. Ama bir sebepten dolayı bu yöntemi iki kez çağırıyor. – rewolf

+0

Bu bir MUnit hatasıydı. 3.6.0-SNAPSHOT'tan 3.6.0-RC1-SNAPSHOT'a geçiyorum ve bu hata gitti. Ancak, diğer MUnit hataları FlowVariables kaybolarak ortaya çıktı. Ama cevabın iyiydi, teşekkürler! : D – rewolf

İlgili konular