usando seu codigo java no mule part 2

4
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"/>

Upload: jeison-barros

Post on 20-Jan-2017

185 views

Category:

Internet


1 download

TRANSCRIPT

Page 1: Usando seu codigo java no mule part 2

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.INVOCATION);

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" allowedMethods="GET"

doc:name="HTTP"/>

<set-variable variableName="flowVarName" value="#['Max the Mule']" doc:name="Variable"/>

<custom-transformer returnClass="model.Animal" class="javacall.AnimalTransformer"

doc:name="Java"/>

Page 2: Usando seu codigo java no mule part 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"/>

Page 3: Usando seu codigo java no mule part 2

<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();

Page 4: Usando seu codigo java no mule part 2

}

</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 !