Gravação em arquivo com File Adapter no Oracle SOA Suite

Crie uma aplicação SOA no JDeveloper e crie um BPEL Síncrono, conforme imagem abaixo:

Create BPEL Process
Create BPEL Process

No XSD criado (normalmente NomeDoBPEL.xsd), edite os dados de entrada e de saída. No nosso exemplo, vamos criar um processo BPEL que receba uma lista de pessoas (nome e telefone), grave no arquivo e retorne a quantidade de registros gravados. Para simplificar, não vamos criar um XSD simples, sem import e afins, então vamos utilizar o seguinte:

<?xml version="1.0" encoding="UTF-8"?>
<schema attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://xmlns.oracle.com/BPELFileAdapterApplication/BPELFileAdapterProject/BPELFileAdapterProcess"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:pes="http://xmlns.oracle.com/BPELFileAdapterApplication/BPELFileAdapterProject/BPELFileAdapterProcess">
<element name="process">
<complexType>
<sequence minOccurs="1">
<element name="pessoa" type="pes:Pessoa" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<element name="processResponse">
<complexType>
<sequence>
<element name="result" type="int"/>
</sequence>
</complexType>
</element>
<complexType name="Pessoa">
<sequence>
<element name="nome" type="string"/>
<element name="telefone" type="string"/>
</sequence>
</complexType>
</schema>

No Componet Palette (Shift+Ctrl+P) clique no File Adapter e arraste na seção direita do composite.xml (External References). Irá abrir a tela de configuração do File Adapter, clique em Next. Dẽ um nome para o serviço e clique em Next. Na próxima tela, escolha a opção "Define from operation and schema (specified later)" e clique em Next. Como nós vamos realizar uma gravação de arquivo, escolha a opção Write File e clique em Next.

File Adapter Configuration Wizard
File Adapter Configuration Wizard

Especifique um diretório, escreva uma convenção para o nome do arquivo e clique em Next. Nessa etapa, como convenção de nome de arquivo, você pode utilizar algumas variáveis, como número sequencial (%SEQ%) ou a data e hora do arquivo (%yyMMddHHmmss%). Além disso, há a possibilidade de gravação no arquivo por número de mensagens, por tempo ou tamanho de arquivo.

File Adapter Configuration Wizard
File Adapter Configuration Wizard

Na próxima tela, selecione o elemento process do XSD do processo BPEL, clique em Next e Finish. Conecte o BPEL com o File Adapter.

Composite
Composite

Edite o BPEL, coloque um nó invoke e ligue-o com o Partner Link do File Adapter que foi criado no passo anterior. No campo Input Variable clique no "+" e crie uma nova variável clicando no OK. Pressione OK novamente. Arraste um nó assign, entre o nó receiveInput e o Invoke.

BPELFileAdapterProcess
BPELFileAdapterProcess

Dê dois clique no nó de assign e atribua o payload de entrada com o body do File Adapter. Adicione mais um assign entre o invoke e o replyOutput. Esse assign vai retornar a quantidade de elementos que foram passadas. Essa etapa é desnecessária, mas é pra não ficar sem retorno, já que a operação de gravação é One-way. Edite ele é coloque no from a expressão: "ora:countNodes('inputVariable','payload','client:pessoa')" e no to: "$outputVariable.payload/client:result".

Realize o teste com o projeto e você terá um arquivo criado com o conteúdo passado. Para os preguiçoso de plantão, segue o projeto utilizado nesse exemplo.

Sobre: Thiago Galbiatti Vespa

Thiago Galbiatti Vespa é mestre em Ciências da Computação e Matemática Computacional pela USP e bacharel em Ciências da Computação pela UNESP. Coordenador de projetos do JavaNoroeste, membro do JCP (Java Community Process), consultor Oracle, arquiteto de software de empresas de médio e grande porte, palestrante de vários eventos e colaborador de projetos open source. Possui as certificações: Oracle Certified Master, Java EE 5 Enterprise Architect – Step 1, 2 and 3; Oracle WebCenter Portal 11g Certified Implementation Specialist; Oracle Service Oriented Architecture Infrastructure Implementation Certified Expert; Oracle Certified Professional, Java EE 5 Web Services Developer; Oracle Certified Expert, NetBeans Integrated Development Environment 6.1 Programmer; Oracle Certified Professional, Java Programmer; Oracle Certified Associate, Java SE 5/SE 6