quarta-feira, 18 de janeiro de 2017

Chamando um flow de dentro do Transform Message


Vamos utilizar dois flows, um com transform que vai chamar o outro flow como na imagem










XML gerado

<?xmlversion="1.0" encoding="UTF-8"?>
<mulexmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd">
<flowname="lookup-flowsFlow">
<polldoc:name="Poll">
<fixed-frequency-scheduler frequency="10000" timeUnit="MINUTES"/>
<logger message="START" level="INFO" doc:name="Logger"/>
</poll>
<dw:transform-messagedoc:name="TransformMessage">
<dw:set-payload><![CDATA[%dw1.0
%output application/java
---
{
nome: lookup("segundoFlow",{})
}]]></dw:set-payload>
</dw:transform-message>
<loggermessage="=== result=== #[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/>
</flow>
<flowname="segundoFlow">
<loggerlevel="INFO" doc:name="Logger"/>
<set-payload value="#[&quot;AlexLindo&quot;]" doc:name="Set Payload"/>
</flow>
</mule>

Fim Obrigado.

terça-feira, 3 de janeiro de 2017

Como a RAML melhorou minha vida

Como a RAML melhorou minha vida no desenvolvimento de APIs.

Ele me ajudou a trabalhar mais rápido, mais fácil e mais inteligente, talvez eu tenha algumas dicas úteis que o mundo precisa saber? Talvez mais ainda estou no início da jornada a cada dia mais em busca de conhecimento para melhor servir a tecnologia.
O conceito de APIs foi esclarecido quando conheci o RAML, com a necessidades de clientes em precisar de soluções práticas e ages conheci o RAML e a parti dai nunca mais deixei de usar


segunda-feira, 19 de setembro de 2016

when dentro de de when

MuleSoft


Como fazer when dentro de de when.

Vamos Criar um flowcom esse componentes


Componentes Utilizados
Http
Logger
Tranform message


Clique em cima do transform para abri a aba de edição do dataweave







XML gerado



Obrigado a todos chegamos ao fim

quinta-feira, 1 de setembro de 2016

File Connector

MULESOFT

O conector de arquivos permite que a sua aplicação Mule para trocar arquivos com um sistema de arquivos.Você pode implementar o conector de arquivo como um ponto final de entrada (ou seja, uma fonte da mensagem), ou como um ponto de extremidade de saída.Este ponto final implementa apenas um padrão de troca de sentido único.

Configuração
endpoint configuração arquivo consiste em duas etapas:
Coloque o ponto final do arquivo dentro do Mule fluxo que está a desenvolver:
Se você colocar o ponto final do arquivo no começo do fluxo, ele vai agir como um ponto de extremidade de entrada (ou seja, fonte da mensagem), provocando o fluxo sempre que recebe um arquivo de entrada.(Você também pode usar o escopo Fonte Composite para embrulhar o ponto final do arquivo, juntamente com outros, terminais similares (tais como FTP, SFTP, ou UDP) para que o fluxo pode receber arquivos através de múltiplos canais de transporte).
Se você colocar o bloco de construção do arquivo no meio ou no final do fluxo, ele irá servir como um ponto de extremidade de saída, passando arquivos para o sistema de arquivos conectado.
Configurar o ponto final do arquivo, fornecendo valores para os campos nas várias janelas no editor propriedades.
Abra o editor de propriedades do arquivo, clicando duas vezes no ícone de arquivo na tela fluxo de mensagens.Configurar as guias, conforme mostrado.

endpointde entrada:

===============================















Mostrar nome
O padrão é o nome endpoint genérico.Alterar o nome de exibição, que deve ser alfa-numérico, para refletir o papel específico do ponto final, ou seja,Order EntryEndpoint

Caminho
O diretório de destino no sistema de arquivos conectado. Se o arquivo é implementado como um parâmetro de entrada, este seria o local dentro do sistema de arquivo do arquivo conectado a ser transferido para o fluxo.Para um ponto de extremidade de arquivo de saída, este seria o diretório no sistema de arquivos conectado ao qual o arquivo atualmente no fluxo será escrito.

Mover para Pattern
(Aplica-se a apenas endpoints arquivo de entrada).O padrão a ser usado quando mover um ficheiro de acordo com a mudança para Diretório propriedade.É possível usar os padrões especificados pelo analisador file name configurado (muitas vezes através de um modelo de conector) para este endpoint arquivo particular.

Mover para diretório
(Aplica-se a apenas endpoints arquivo de entrada).Normalmente, o arquivo que está sendo recebido é simplesmente lido pelo terminal de entrada e despachado para o próximo bloco de construção no fluxo.Para salvar uma cópia na máquina host Mule, especifique um caminho neste campo.

Configuração do conector
Use a lista suspensa para selecionar uma configuração de conector criado anteriormente para este desfecho.Se você não tiver criado uma configuração de conector para este tipo de nó de extremidade, você pode fazê-lo a partir desta janela clicando em Adicionar. Clique em Editar para modificar um elemento global criado anteriormente.

polling Frequency
(Aplica-se a apenas endpoints arquivo de entrada).Especificar quantas vezes o endpoint deve verificar para as mensagens recebidas.O valor padrão é1000ms.

Idade arquivo
(Aplica-se a apenas endpoints arquivo de entrada).Define um período mínimo de um arquivo deve esperar antes de ser processado.Isso ajuda a garantir que os arquivos longos são recebidos em sua totalidade antes do início do processamento.No entanto, mula e o sistema de arquivos conectado deve estar no tempo sincronizado para que esse recurso funcione corretamente.

Nome do arquivo Regex Filtro
(Aplica-se a apenas endpoints arquivo de entrada).Configurar um filtro para restringir os ficheiros a ser processado.

Padrão de saída
(Aplica-se apenas endpoint arquivo de saída).Especificar um padrão para nomear os arquivos que são enviados a partir da extremidade de arquivos para o sistema de arquivos conectado.Se isso não for definido, o ponto final do arquivo usa o mesmo padrão de nomeação de arquivo usado para arquivos de entrada.

Obrigado chegamos ao FIM

quinta-feira, 25 de agosto de 2016

Sessão Variable

Sessão Variable 

Use uma  variável de sessão  para definir ou remover uma variável que está vinculado a uma mensagem para todo seu ciclo de vida, potencialmente através de múltiplos fluxos, aplicações e até mesmo servidores. As variáveis ​​de sessão pode ser facilmente propagado a partir de um fluxo para outro através do transporte VM, ou uma referência de fluxo, mas não através do conector HTTP .Pelo contrário, as variáveis ​​especificadas através do transformador variável persistirem apenas enquanto a mensagem com o qual eles estão associados permanece dentro do mesmo fluxo. Para saber mais sobre escopos de mensagens, consulte  Conceitos de mula .
O transformador variável de sessão é diferente do transformador variável eo transformador propriedade. Consulte a tabela abaixo para uma comparação destes três transformadores.
Sessão transformador variávelTransformador variávelpropriedade Transformer
Usar
Use para definir ou remover uma variável que está ligada à mensagem atual para todo o seu ciclo de vida, através de múltiplos fluxos, aplicações e até mesmo servidores.
Use para definir ou remover uma variável na mensagem, vinculado ao fluxo de corrente.
Use para definir, remover ou copiar as propriedades do escopo de saída de uma mensagem.
Persistência
As variáveis ​​de sessão criados com um transformador variável de sessão persistir durante o ciclo de vida mensagem inteira, independentemente de barreiras de transporte, exceto para o conector HTTP que não propagá-los.
As variáveis ​​estabelecidas com um transformador variável persistem somente para o fluxo de corrente e não pode atravessar a barreira de transporte.
Uma vez que uma mensagem atinge um de saída do conector, todas as propriedades no âmbito de saída são enviados com a mensagem na forma de metadados específico de transporte (cabeçalhos HTTP para uma saída do conector HTTP, por exemplo).
Depois de ter definido uma variável de sessão, você pode chamá-lo usando o sessionVarsmapa em uma expressão Mule. Por exemplo, se você tiver definido uma variável de sessão com o nome "SVname" eo valor "SVvalue", mais tarde você pode invocar essa variável de sessão usando a expressão #[sessionVars.SVname], que avalia a SVvalue.
Note-se que a variável de sessão está ligada a uma mensagem de mula, mas não a um MuleEvent. Isto significa que se você faz uso de um elemento que faz cópias da mensagem - como um escopo assíncrono ou uma dispersão reunir componente - mudanças nas variáveis ​​de fluxo não será mantido entre estas mensagens replicadas, mesmo que começou como um.

Configuração

session_transformer
CampoValorDescriçãoXML
Mostrar nome
variável de sessão
Personalize para exibir um nome exclusivo para o transformador em sua aplicação.
doc:name="Session Variable"
Operação
Ajuste variável de sessão
Selecione para definir uma nova variável de sessão na sua mensagem (como mostrado no exemplo imagem acima).
<set-session-variable>
Remover Session variável
Selecione para excluir uma variável de sessão existente a partir de sua mensagem.
<remove-session-variable>
Nome
String ou expressão Mule
Especifique o nome para a variável de sessão que está a criar ou identificar o nome da variável de sessão que está a remover. Se você estiver removendo as variáveis ​​de sessão, este campo aceita um curinga "*" caráter.
variableName="MyNewSessionVariableName"
Valor
String ou expressão Mule
exibe mula este campo somente se você estiver configurando uma nova variável de sessão.Especificar o valor usando uma string ou uma expressão Mule.
value="MyNewSessionVariableValue"

Exemplo

Em muitos casos, as mensagens de viajar através de múltiplos fluxos, aplicações e até mesmo servidores. Em tais casos, pode ser útil para anexar algum tipo de metadados de uma mensagem, de modo a controlar-lo a partir da sua origem até ao destino final em todos os sistemas. No exemplo abaixo, vamos definir uma variável de sessão chamada messageID. Este messageID contém um identificador exclusivo que persiste na mensagem ao longo de todo o ciclo de vida (a menos que seja explicitamente removido por outra sessão transformador variável).

Exemplo completo de código

 Ver namespace
1
2
3
4
5
6
7
<http:listener-config name="listener-config" host="localhost" port="8081"/>
<flow name="SessionVariableTransformingFlow" doc:name="SessionVariableTransformingFlow">
   <http:listener config-ref="listener-config" path="/" doc:name="HTTP Connector"/>
   <set-session-variable variableName="messageID" value="#[java.util.UUID.randomUUID().toString()]" doc:name="Set Message ID"/>
   <logger message="Variable set with #[sessionVars.messageID]" level="INFO"/>
   <remove-session-variable "NameofSessionVariabletoRemove" doc:name="Session Variable"/>
</flow>

quarta-feira, 24 de agosto de 2016

TRANSFORMANDOOPAYLOADDEJSONPARAOBJETO

MuleSoft

TRANSFORMANDO O PAYLOAD DE JSON PARA OBJETO




Então é isso pessoal recuperando um valor de dentro de um payloaddo tipo json


FIM

Referência Suporte JSON

MuleSoft



JSON, abreviação de JavaScriptObjectNotation, é um formato de intercâmbio de dados leve. É, um formato legível baseado em texto para representar estruturas de dados simples e matrizes associativas (chamados objetos).
{"Name": "John Doe","Dob": "01/01/1970","endereço de e-mail":[{"Type": "casa","Endereço": "john.doe@gmail.com"},{"Type": "trabalho","Endereço": "jdoe@bigco.com"}]}
E nós temos uma pessoa de objeto que deseja criar a partir dos dados JSON. Nós usamos anotações para descrever como realizar o mapeamento. Usamos o @JsonAutoDetectdizer que os nomes dos membros campo mapear diretamente para nomes de campo JSON:
@JsonAutoDetect
PublicclassPerson
{
privateString nome;
dobprivateString;

Lista privada <EmailAddress> emailAddresses;

Cadeia getNamepública () {nameretorno; }

setNamepublicvoid(String nome) {this.name= nome; }

Cadeia getDobpública () {returndob; }

setDobpublicvoid(dnString) {this.dob= dn; }

Lista pública <EmailAddress> getEmailAddresses() {emailAddressesde regresso; }

setEmailAddressespublicvoid(List<EmailAddress> emailAddresses) {this.emailAddresses= emailAddresses; }
}
O objeto EmailAddressque é usado nos emailAddressesé apenas mais um JavaBeancom a anotação @JsonAutoDetect.
Neste ponto Mulepode descobrir se deseja realizar uma JSON transforma com base nos parâmetros do método que está sendo chamado. Por exemplo:
PersonComponentclasse pública {
processPersonpublicvoid(@PayloadPessoa pessoa)
Aqui nós iremos receber o conteúdo do arquivo people.jsonacima em um ponto final, mula veria que Person.classé um objeto JSON anotada e que tinha recebido os dados JSON da fila JMS e executar a conversão.
JSON Global Mapper
Jackson executa mapeamentos através da ObjectMapper. Este é um objeto que pode ser configurado com outra configuração sobre como serialização de dados e definir mixinsque adicionar anotações para objetos que você não pode mudar diretamente. É possível definir um ObjectMapperglobal; um único mapeadorusado para todos os JSON transforma em sua aplicação. Isso não é necessário, uma vez Mulecria automaticamente um mapeadorde um transformador, mas usando um mapeadorglobal pode ser útil se você precisar configurar propriedades específicas sobre o mapeadorou uso mixins. Para criar um ObjectMappercompartilhada Adicione o seguinte ao seu arquivo de configuração mula:
<Json: mapeadorname= "myMapper">
<Json: mixinmixinClass= "org.mule.module.json.transformers.FruitCollectionMixin"
targetClass= "org.mule.module.json.transformers.FruitCollection" />
<Json: mixinmixinClass= "org.mule.module.json.transformers.AppleMixin"
targetClass= "org.mule.tck.testmodels.fruit.Apple" />
</ Json: mapeador>
Interceptando JSON transformações
Até agora discutimos como mula realiza transformações JSON automáticas. Às vezes você pode querer interceptar a transformação. Para isso basta criar um transformador com um retorno de método ou tipo de parâmetro de sua classe JSON:
@Transformer(SourceTypes= {InputStream.class})
pública Pessoa TOPERSON (String json, ObjectMappermapeador) lança JAXBException
{
return(Pessoa) mapper.readValue(em, Person.class);
}
A instância ObjectMapperquer é criado para você ou o contexto global para a sua aplicação é utilizada. Uma razão para isso seria a de retirar alguns elementos JSON e criar objetos a partir de um subconjunto do JSON recebido. Para mais informações sobre as transformações consulte a seção Usando Transformers.
JsonPath
Não há linguagem padrão atualmente para consultar gráficos de dados JSON, da mesma forma XPATH pode consultar documentos XML. Mulecriou uma sintaxe de consulta simples para trabalhar com dados JSON em Java, chamados JsonPath.
Esta sintaxe de consulta fornece uma maneira simples de navegar uma estrutura de dados JSON. Os seguintes dados JSON demonstra como usar consultas Caminho JSON:
{
"Name": "John Doe",
"Dob": "01/01/1970",
"endereço de e-mail":[
{
"Type": "casa",
"Endereço": "john.doe@gmail.com"
},
{
"Type": "trabalho",
"Endereço": "jdoe@bigco.com"
}
]
}
Para selecionar um uso entrada de criança:
1
nome
Para acessar dados de matriz, use colchetes com um valor de índice ou seja,
1
emailAddresses[0] / tipo
Ou em que o elemento de rota é uma matriz:
1
[0] / arrayElement
Além disso, as matrizes multi-dimensionaispodem ser acessados usando:
1
filtros [1] / init[1] [0]
Isso é raro, mas se um nome de propriedade Jsoncontém uma '/' o nome precisa besinglecitou isto é,
1
resultados / 'http: //foo.com'/value
JsonPathem expressões
JSON Path pode ser usado em expressões de mula para consultar cargas úteis de mensagens JSON para filtrar ou enriquecimento.
Por exemplo, para usar JSON Caminho para realizar roteamentobaseado em conteúdo:
<Choice>
<Quando a expressão = "emailAddresses[0] / type= 'home'" avaliador = "json">
<Acrescentar-string-transformadorde mensagem = "Endereço de casa é # [JSON: emailAddresses[0] / endereço]" />
</ Quando>
<Quando a expressão = "emailAddresses[0] / type= 'trabalho'" avaliador = "json">
<Acrescentar-string-transformadorde mensagem = "Endereço O trabalho é # [JSON: emailAddresses[0] / endereço]" />
</ Quando>
<Outro modo>
<Acrescentar-string-transformadorde mensagem = "Nenhum endereço de e-mail encontrado" />
</ Em contrário>
</ Choice>
O nome do avaliador de expressão é 'json', a expressão é qualquer expressão válida Path JSON. Note-se que ao fazer expressões booleanas, como no exemplo acima, alguns operadores são suportados:
Fim Obrigado