1. Usando seu codigo Java no Mule – Part 2
Message Transformer
Vamos configurar a nossa classe de transformação que irá devolver o POJO
"Animal" . Neste caso , temos que se estendem "
org.mule.transformer.AbstractMessageTransformer " , utilizando a operação
transformMessage que recebe o MuleMessage como um parâmetro .
No exemplo abaixo temos o nome de uma variável de fluxo e retornar um novo
animal com este nome :
public class AnimalTransformer extends AbstractMessageTransformer{
public Object transformMessage(MuleMessage message, String outputEncoding) throws
TransformerException {
String flowVarName = message.getProperty("flowVarName", PropertyScope.INVOCA
Animal animal=new Animal(flowVarName);
return animal;
}
}
Vamos fazê-lo funcionar ! usando o <custom-transformer> nos podemos
especificar quais tipos de objetos que irá receber e a classe que irá lidar com a
transformação.
<flow name="usingTransformer">
<http:listener config-ref="HTTP_Listener_Configuration" path="/transformer" allowedMeth
doc:name="HTTP"/>
<set-variable variableName="flowVarName" value="#['Max the Mule']" doc:name="Variab
<custom-transformer returnClass="model.Animal" class="javacall.AnimalTransformer"
doc:name="Java"/>
2. <object-to-string-transformer doc:name="Object to String"/>
</flow>
Transforming via Annotation
Temos a opção de usar Anotações ao implementar nossa solução de
transformação. Para atingir este objetivo , primeiro anotar a classe com
@ContainsTransformerMethods ( "
org.mule.api.annotations.ContainsTransformerMethods ") que marca a classe
como um recipiente de um transformador Mule . O método deve ser anotado
com @Transformer ( " org.mule.api.annotations.Transformer " ) , o que significa
que serão disponibilizados na mula Container.
No exemplo abaixo , estamos usando o @Payload anotação ( "
org.mule.api.annotations.param.Payload " ) para injetar nossa carga útil em
nosso parâmetro String nome e devolver um animal com este nome.
@ContainsTransformerMethods
public class AnimalTransformerAnnotation {
@Transformer
public Animal returnAnimal(@Payload String name){
return new Animal(name);
}
}
Nosso teste do fluxo Mule:
<flow name="usingTransformerAnnotation">
<http:listener config-ref="HTTP_Listener_Configuration" path="/transformerAnnotation"
doc:name="HTTP" allowedMethods="GET"/>
<set-payload value="#['Annotated Max!']" doc:name="Set Payload"/>
3. <component class="javacall.AnimalTransformerAnnotation" doc:name="Java"/>
<object-to-string-transformer doc:name="Object to String"/>
</flow>
Importando livrarias Java no Dataweave e MEL
Por último, mas não menos importante, vamos definir uma função global que
importa diferentes bibliotecas e pode ser usado via DataWeave , isso não é
legal!
Primeiro de tudo, precisamos definir nossa função global. Neste exemplo ,
vamos calcular o número de dias de um mês previsto como um parâmetro.
Vamos fazer uso do Calendário e SimpleDateFormat bibliotecas.
<configuration doc:name="Configuration">
<expression-language>
<global-functions>
def dayOfTheMonth(date){
import java.util.Calendar;
import java.text.SimpleDateFormat;
cal = Calendar.getInstance();
sdf = new SimpleDateFormat('yyyyMMdd');
cal.setTime(sdf.parse(date));
return cal.getActualMaximum(Calendar.DAY_OF_MONTH).toString();
4. }
</global-functions>
</expression-language>
</configuration>
Nossa nova função está pronto para ser usado! Podemos agora usar uma
expressão MEL ou incluir nossa função no Dataweave !
MEL: #[dayOfTheMonth(‘20151027’)]
DataWeave: day: dayOfTheMonth(‘20140302’)
Espero que estas várias opções de ajudar a melhorar a sua flexibilidade
durante a utilização da mula !