From 99e83ef0ec4759c05a7f761901ffbb0cbc118d71 Mon Sep 17 00:00:00 2001 From: jstaerk Date: Sat, 28 Jun 2014 20:07:46 +0200 Subject: [PATCH] 1.1.0 in development, importer seems to work now w/ ZUGFeRD 1.0, added importer test, reset mustang-1.0.jar to original --- mustang/pom.xml | 2 +- .../ZUGFeRD/ZUGFeRDImporter.java | 42 +++++++--- .../org/mustangproject/ZUGFeRD/AppTest.java | 76 ++++++++++++------ mustang/target/mustang-1.0.jar | Bin 17293 -> 17026 bytes mustang/target/mustang-1.1.0.alpha.jar | Bin 0 -> 17231 bytes 5 files changed, 81 insertions(+), 39 deletions(-) create mode 100644 mustang/target/mustang-1.1.0.alpha.jar diff --git a/mustang/pom.xml b/mustang/pom.xml index 3cc2ecd4..bc6150b5 100644 --- a/mustang/pom.xml +++ b/mustang/pom.xml @@ -4,7 +4,7 @@ org.mustangproject.ZUGFeRD mustang - 1.0.2 + 1.1.0.alpha jar mustang diff --git a/mustang/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/mustang/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index 1556e6cb..584f8ffe 100644 --- a/mustang/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/mustang/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -28,6 +28,8 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; +//root.setNamespace(Namespace.getNamespace("http://www.energystar.gov/manageBldgs/req")); + public class ZUGFeRDImporter { /* call extract(importFilename). @@ -110,6 +112,7 @@ public class ZUGFeRDImporter { Document document = null; factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); //otherwise we can not act namespace independend, i.e. use document.getElementsByTagNameNS("*",... try { builder = factory.newDocumentBuilder(); } catch (ParserConfigurationException ex3) { @@ -125,10 +128,13 @@ public class ZUGFeRDImporter { } catch (IOException ex2) { ex2.printStackTrace(); } + NodeList ndList ; + // rootNode = document.getDocumentElement(); // ApplicableSupplyChainTradeSettlement - NodeList ndList = document - .getElementsByTagName("PaymentReference"); //$NON-NLS-1$ + ndList = document.getDocumentElement() + .getElementsByTagNameNS("*","PaymentReference"); //$NON-NLS-1$ + for (int bookingIndex = 0; bookingIndex < ndList .getLength(); bookingIndex++) { Node booking = ndList.item(bookingIndex); @@ -158,26 +164,38 @@ public class ZUGFeRDImporter { setIBAN(booking.getTextContent()); } + + DE1234 + + + DE5656565 + Commerzbank + + */ - ndList = document.getElementsByTagName("PayeePartyCreditorFinancialAccount"); //$NON-NLS-1$ + ndList = document.getElementsByTagNameNS("*","PayeePartyCreditorFinancialAccount"); //$NON-NLS-1$ for (int bookingIndex = 0; bookingIndex < ndList .getLength(); bookingIndex++) { + Node booking = ndList.item(bookingIndex); // there are many "name" elements, so get the one below // SellerTradeParty NodeList bookingDetails = booking.getChildNodes(); + + for (int detailIndex = 0; detailIndex < bookingDetails .getLength(); detailIndex++) { Node detail = bookingDetails.item(detailIndex); - if (detail.getNodeName().equals("IBANID")) { //$NON-NLS-1$ + if ((detail.getLocalName()!=null)&&(detail.getLocalName().equals("IBANID"))) { //$NON-NLS-1$ setIBAN(detail.getTextContent()); - } + + } } } - ndList = document.getElementsByTagName("PayeeSpecifiedCreditorFinancialInstitution"); //$NON-NLS-1$ + ndList = document.getElementsByTagNameNS("*","PayeeSpecifiedCreditorFinancialInstitution"); //$NON-NLS-1$ for (int bookingIndex = 0; bookingIndex < ndList .getLength(); bookingIndex++) { @@ -188,10 +206,10 @@ public class ZUGFeRDImporter { for (int detailIndex = 0; detailIndex < bookingDetails .getLength(); detailIndex++) { Node detail = bookingDetails.item(detailIndex); - if (detail.getNodeName().equals("BICID")) { //$NON-NLS-1$ + if ((detail.getLocalName()!=null)&&(detail.getLocalName().equals("BICID"))) { //$NON-NLS-1$ setBIC(detail.getTextContent()); } - if (detail.getNodeName().equals("Name")) { //$NON-NLS-1$ + if ((detail.getLocalName()!=null)&&(detail.getLocalName().equals("Name"))) { //$NON-NLS-1$ setBankName(detail.getTextContent()); } } @@ -199,7 +217,7 @@ public class ZUGFeRDImporter { } // - ndList = document.getElementsByTagName("SellerTradeParty"); //$NON-NLS-1$ + ndList = document.getElementsByTagNameNS("*","SellerTradeParty"); //$NON-NLS-1$ for (int bookingIndex = 0; bookingIndex < ndList .getLength(); bookingIndex++) { @@ -210,14 +228,14 @@ public class ZUGFeRDImporter { for (int detailIndex = 0; detailIndex < bookingDetails .getLength(); detailIndex++) { Node detail = bookingDetails.item(detailIndex); - if (detail.getNodeName().equals("Name")) { //$NON-NLS-1$ + if ((detail.getLocalName()!=null)&&(detail.getLocalName().equals("Name"))) { //$NON-NLS-1$ setHolder(detail.getTextContent()); } } } - ndList = document.getElementsByTagName("DuePayableAmount"); //$NON-NLS-1$ + ndList = document.getElementsByTagNameNS("*","DuePayableAmount"); //$NON-NLS-1$ for (int bookingIndex = 0; bookingIndex < ndList .getLength(); bookingIndex++) { @@ -233,7 +251,7 @@ public class ZUGFeRDImporter { /* there is apparently no requirement to mention DuePayableAmount,, * if it's not there, check for GrandTotalAmount */ - ndList = document.getElementsByTagName("GrandTotalAmount"); //$NON-NLS-1$ + ndList = document.getElementsByTagNameNS("*","GrandTotalAmount"); //$NON-NLS-1$ for (int bookingIndex = 0; bookingIndex < ndList .getLength(); bookingIndex++) { Node booking = ndList.item(bookingIndex); diff --git a/mustang/src/test/java/org/mustangproject/ZUGFeRD/AppTest.java b/mustang/src/test/java/org/mustangproject/ZUGFeRD/AppTest.java index a8cece5d..73ceb8b8 100644 --- a/mustang/src/test/java/org/mustangproject/ZUGFeRD/AppTest.java +++ b/mustang/src/test/java/org/mustangproject/ZUGFeRD/AppTest.java @@ -1,5 +1,7 @@ package org.mustangproject.ZUGFeRD; +import java.io.IOException; + import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; @@ -7,32 +9,54 @@ import junit.framework.TestSuite; /** * Unit test for simple App. */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } +public class AppTest extends TestCase { + /** + * Create the test case + * + * @param testName + * name of the test case + */ + public AppTest(String testName) { + super(testName); + } - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } + /** + * @return the suite of tests being tested + */ + public static Test suite() { + return new TestSuite(AppTest.class); + } - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } + /** + * Rigourous Test :-) + */ + public void testImport() { + ZUGFeRDImporter zi = new ZUGFeRDImporter(); + zi.extract("./src/test/java/org/mustangproject/ZUGFeRD/RE-20140628_9.pdf"); + // Reading ZUGFeRD + + String amount=null; + String bic=null; + String iban=null; + String holder=null; + String ref=null; + + if (zi.canParse()) { + zi.parse(); + amount=zi.getAmount(); + bic=zi.getBIC(); + iban=zi.getIBAN(); + holder=zi.getHolder(); + ref=zi.getForeignReference(); + } + + + assertEquals(amount, "1.19"); + assertEquals(bic, "DE5656565"); + assertEquals(iban, "DE1234"); + assertEquals(holder, "usegroup"); + assertEquals(ref, "RE-20140628/9"); + + + } } diff --git a/mustang/target/mustang-1.0.jar b/mustang/target/mustang-1.0.jar index 29d73aff356ea0ec8b787bcb26cc0bf1a828202e..4c1c0e6863b8eef6145f993aed54e968501ab623 100644 GIT binary patch delta 8397 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 VPa+nHCy^-FLxBQtC-KMf{{Y{wS9kyb delta 8666 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 a5hU|3porvOptA%i)IshEIx6VT>Hh%m<04!D diff --git a/mustang/target/mustang-1.1.0.alpha.jar b/mustang/target/mustang-1.1.0.alpha.jar new file mode 100644 index 0000000000000000000000000000000000000000..034e17ff0944045413edd1739cef63fa62c6282f GIT binary patch literal 17231 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 QfuX&;oL{a6`G5ZUe{jZ%`Tzg` literal 0 HcmV?d00001