Cómo analizar un XML con formato incorrecto (de x) con ofx4j?
Pregunta
Estoy desesperadamente tratando de utilizar la biblioteca siguiente: ofx4j . Sin embargo, la documentación relativa a analizar un archivo de x es un poco Lite. Dice: Si usted tiene un archivo u otro recurso de secuencia, se puede leer usando una instancia de net.sf.ofx4j.io.OFXReader
bien, pero ¿cómo lo hago?
También se establece lo siguiente:. Si quieres deserializar la OFX directamente a un objeto Java, utilice el net.sf.ofx4j.io.AggregateUnmarshaller
Bella, pero eso es un poco complicado para mí. ¿Hay algo obvio que me perdí? Cuando intento utilizar el unmarshaller, se me pide que implementar una interfaz.
Podría alguien que me señale un recurso en línea que explica los bits que me falta? O el mejor, ¿qué se puede entender a partir de las declaraciones anteriores relativas a la ofxreader y la unmarshaller?
Por favor, no me golpear, estoy aprendiendo Java con la playframework y realmente apreciaría a ser capaz de analizar esos archivos ofx.
gracias de antemano.
Solución
No veo un tutorial simple y llano, pero no hay código de ejemplo en el prueba directorio que ilustra OFXReader
y AggregateUnmarshaller
.
La frase "una instancia de net.sf.ofx4j.io.OFXReader
" significa una de las clases de implementación conocidos", tales como NanoXMLOFXReader
, que es probado aquí . una prueba para AggregateUnmarshaller
es aquí .
El y archivos de correo son un buen recurso, también. Parece que una gran cantidad de instituciones participar.
Otros consejos
Para aquellos que tropiezan en este como lo hice cuando no podía obtener los resultados esperados de la AggregateUnmarshaller ... Aquí es un ejemplo.
//Using a multipart file, but using a regular file is similar.
public void parse(MultipartFile file) throws IOException {
//Use ResponseEnvelope to start.
AggregateUnmarshaller<ResponseEnvelope> unmarshaller = new AggregateUnmarshaller<ResponseEnvelope>(
ResponseEnvelope.class);
try {
ResponseEnvelope envelope = unmarshaller.unmarshal(file.getInputStream());
//Assume we are just interested in the credit card info. Make sure to cast.
CreditCardResponseMessageSet messageSet = (CreditCardResponseMessageSet) envelope
.getMessageSet(MessageSetType.creditcard);
List<CreditCardStatementResponseTransaction> responses = messageSet.getStatementResponses();
for (CreditCardStatementResponseTransaction response : responses) {
CreditCardStatementResponse message = response.getMessage();
String currencyCode = message.getCurrencyCode();
List<Transaction> transactions = message.getTransactionList().getTransactions();
for (Transaction transaction : transactions) {
System.out.println(transaction.getName() + " " + transaction.getAmount() + " "
+ currencyCode);
}
}
}
catch (OFXParseException e) {
e.printStackTrace();
}
}