Apache Camel - Usando com Spring
Agora vamos recriar o aplicativo do capítulo anterior usando Spring. Isso nos dará uma ideia de como criar o roteamento Camel em XML em vez de DSL.
Criando Novo Projeto
Crie um novo Maven projeto e especifique o seguinte -
GroupId: BasketWithSpring
ArtifactId: BasketWithSpring
Selecione o local padrão para o seu projeto ou, se preferir, especifique o diretório de sua escolha.
Adicionando Dependências
Além das dependências principais que você usou no aplicativo anterior, você precisa adicionar mais algumas dependências para usar o Spring. As dependências são adicionadas em pom.xml. Agora, abra pom.xml e adicione as seguintes dependências -
<dependencies>
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.15.2</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.15.1</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring</artifactId>
<version>2.15.1</version>
</dependency>
</dependencies>
Criação de Java DSL para Spring
Vamos agora criar uma nova classe Java chamada DistributeOrderXML. Adicione o seguinte código a ele -
public class DistributeOrderXML {
public static void main(String[] args) throws Exception {
ApplicationContext appContext = new ClassPathXmlApplicationContext(
"SpringRouteContext.xml");
CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);
try {
camelContext.start();
ProducerTemplate orderProducerTemplate = camelContext.createProducerTemplate();
InputStream orderInputStream = new FileInputStream(ClassLoader.getSystemClassLoader()
.getResource("order.xml").getFile());
orderProducerTemplate.sendBody("direct:DistributeOrderXML", orderInputStream);
} finally {
camelContext.stop();
}
}
}
No main método, primeiro criamos uma instância de ApplicationContext, que é a interface central em um aplicativo Spring. Em seu construtor, especificamos o nome do arquivo XML que contém nossas informações de roteamento e filtragem.
ApplicationContext appContext = new ClassPathXmlApplicationContext(
"SpringRouteContext.xml");
Em seguida, criamos CamelContext especificando o criado acima ApplicationContext em seu parâmetro.
CamelContext camelContext = SpringCamelContext.springCamelContext(appContext, false);
Neste ponto, nosso roteamento e filtragem estão configurados. Portanto, começamos oCamelContext usando seu startmétodo. Como no caso anterior, definimos o Endpoint para carregar o arquivo order.xml e iniciar o processamento. Agora, vamos entender como o roteamento é definido em XML.
Criando o contexto do aplicativo
Adicione um novo arquivo XML ao projeto e chame-o SpringRouteContext.xml. Recorte e cole o seguinte conteúdo neste arquivo.
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "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.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd ">
<camelContext xmlns = "http://camel.apache.org/schema/spring">
<route>
<from uri = "direct:DistributeOrderXML"/>
<log message = "Split by Distribute Order"/>
<split>
<xpath>//order[@product = 'Oil']/items</xpath>
<to uri = "file:src/main/resources/order/"/>
<to uri = "stream:out"/>
</split>
</route>
</camelContext>
</beans>
Aqui, definimos a consulta xpath da seguinte forma, observe que agora selecionamos todos os pedidos de “óleo”.
<xpath>//order[@product = 'Oil']/items</xpath>
Os pontos de extremidade de saída são múltiplos. O primeiro endpoint especifica oorder pasta e a segunda especifica o console.
<to uri = "file:src/main/resources/order/"/>
<to uri = "stream:out"/>
Execute o aplicativo.
Resultado dos testes
Ao executar o aplicativo, você verá a seguinte saída na tela.
<items>
<item>
<Brand>Cinthol</Brand>
<Type>Original</Type>
<Quantity>4</Quantity>
<Price>25</Price>
</item>
<item>
<Brand>Cinthol</Brand>
<Type>Lime</Type>
<Quantity>6</Quantity>
<Price>30</Price>
</item>
</items>
Confira o orderpasta no caminho especificado por você. Você encontrará um arquivo recém-criado que contém o código XML acima.
Conclusão
Camel fornece uma estrutura pronta para uso que implementa EIPs para facilitar seus projetos de integração. Ele oferece suporte à codificação em linguagens de domínio específico e também ao uso de XML.