usando seu codigo java no mule part 2
TRANSCRIPT
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"/>
<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"/>
<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();
}
</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 !