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

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.

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.

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.

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.

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.