Lendo Arquivo OFX com ofx4j
Autor: Willian | Publicado: 2010-08-23T13:00:00-07:00

Neste post vamos aprender a ler OFX (Open Financial Exchange, que é uma especificação unificada para a troca eletrônica de dados financeiros entre as instituições financeiras, empresas e consumidores através da Internet) utilizando a biblioteca ofx4j disponibilizada aqui.Após transformar o ofx em objeto no java você pode navegar nas tags do arquivo, porém, achei uma falha na biblioteca, não consigo acessar diretamente a tag  e o resto de sua hierarquia, mas é justamente dentro dessa tag que está as transações (que, teoricamente é o que importa para nós), desse modo tive que "pegar no braço" esse objeto com a lista de transações.Abaixo o código exemplo:import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.List;import net.sf.ofx4j.domain.data.MessageSetType;import net.sf.ofx4j.domain.data.ResponseEnvelope;import net.sf.ofx4j.domain.data.ResponseMessageSet;import net.sf.ofx4j.domain.data.banking.BankStatementResponse;import net.sf.ofx4j.domain.data.banking.BankStatementResponseTransaction;import net.sf.ofx4j.domain.data.banking.BankingResponseMessageSet;import net.sf.ofx4j.domain.data.common.Transaction;import net.sf.ofx4j.domain.data.signon.SignonResponse;import net.sf.ofx4j.io.AggregateUnmarshaller;import net.sf.ofx4j.io.OFXParseException;public class Main {public static void main(String[] args) throws IOException, OFXParseException {   AggregateUnmarshaller a = new AggregateUnmarshaller(ResponseEnvelope.class);   ResponseEnvelope re = a.unmarshal(new FileInputStream(new File(System.getProperty("user.home") + "/Desktop/teste.ofx")));   //objeto contendo informações como instituição financeira, idioma, data da conta.   SignonResponse sr = re.getSignonResponse();   //como não existe esse get "BankStatementResponse bsr = re.getBankStatementResponse();"   //fiz esse codigo para capturar a lista de transações   MessageSetType type = MessageSetType.banking;   ResponseMessageSet message = re.getMessageSet(type);   if (message != null) {       List bank = ((BankingResponseMessageSet) message).getStatementResponses();       for (BankStatementResponseTransaction b : bank) {           System.out.println("cc: " + b.getMessage().getAccount().getAccountNumber());           System.out.println("ag: " + b.getMessage().getAccount().getBranchId());           System.out.println("balanço final: " + b.getMessage().getLedgerBalance().getAmount());           System.out.println("dataDoArquivo: " + b.getMessage().getLedgerBalance().getAsOfDate());           List list = b.getMessage().getTransactionList().getTransactions();           System.out.println("TRANSAÇÕES\n");           for (Transaction transaction : list) {               System.out.println("tipo: " + transaction.getTransactionType().name());               System.out.println("id: " + transaction.getId());               System.out.println("data: " + transaction.getDatePosted());               System.out.println("valor: " + transaction.getAmount());               System.out.println("descricao: " + transaction.getMemo());               System.out.println("");           }       }   }}}dependências: nanoxml.jar, commons-logging.e é isso, até a próxima.