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.