diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java index f6bd06a5..9ea0b067 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporter.java @@ -33,27 +33,21 @@ import org.apache.pdfbox.pdmodel.common.PDNameTreeNode; import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification; import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile; import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.*; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; import java.io.*; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Logger; - -//root.setNamespace(Namespace.getNamespace("http://www.energystar.gov/manageBldgs/req")); +import java.util.*; public class ZUGFeRDImporter { - /* - * call extract(importFilename). containsMeta() will return if ZUGFeRD data has - * been found, afterwards you can call getBIC(), getIBAN() etc. - * - */ /** * @var if metadata has been found @@ -62,57 +56,31 @@ public class ZUGFeRDImporter { /** * @var the reference (i.e. invoice number) of the sender */ - private String foreignReference; - private String BLZ; - private String BIC; - private String IBAN; - private String KTO; - private String holder; - private String amount; - private String dueDate; - private HashMap additionalXMLs = new HashMap(); + private HashMap additionalXMLs = new HashMap<>(); /** * Raw XML form of the extracted data - may be directly obtained. */ private byte[] rawXML = null; - private String bankName; - private boolean amountFound; - private boolean extractAttempt = false; - private boolean parsed = false; private String xmpString = null; // XMP metadata - private static final Logger LOG = Logger.getLogger(ZUGFeRDImporter.class.getName()); - /** - * Extracts a ZUGFeRD invoice from a PDF document represented by a file name. - * Errors are just logged to STDOUT. - * - * @param pdfFilename the filename of the pdf - */ - public void extract(String pdfFilename) { + public ZUGFeRDImporter(String pdfFilename) { try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(pdfFilename)); - extractLowLevel(bis); bis.close(); - } catch (IOException ioe) { - ioe.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + throw new ZUGFeRDExportException(e); } } - static String convertStreamToString(java.io.InputStream is) { - // source https://stackoverflow.com/questions/309424/how-do-i-read-convert-an-inputstream-into-a-string-in-java referring to - // https://community.oracle.com/blogs/pat/2004/10/23/stupid-scanner-tricks - java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); - return s.hasNext() ? s.next() : ""; - } - - /** - * get xmp metadata of the PDF, null if not available - * - * @return string - */ - public String getXMP() { - return xmpString; + public ZUGFeRDImporter(InputStream pdfStream) { + try { + extractLowLevel(pdfStream); + } catch (IOException e) { + e.printStackTrace(); + throw new ZUGFeRDExportException(e); + } } /** @@ -121,9 +89,7 @@ public class ZUGFeRDImporter { * * @param pdfStream a inputstream of a pdf file */ - public void extractLowLevel(InputStream pdfStream) throws IOException { - PDEmbeddedFilesNameTreeNode etn; - extractAttempt = true; + private void extractLowLevel(InputStream pdfStream) throws IOException { try (PDDocument doc = PDDocument.load(pdfStream)) { // PDDocumentInformation info = doc.getDocumentInformation(); PDDocumentNameDictionary names = new PDDocumentNameDictionary(doc.getDocumentCatalog()); @@ -131,7 +97,8 @@ public class ZUGFeRDImporter { InputStream XMP = doc.getDocumentCatalog().getMetadata().exportXMPMetadata(); xmpString = convertStreamToString(XMP); - etn = names.getEmbeddedFiles(); + + PDEmbeddedFilesNameTreeNode etn = names.getEmbeddedFiles(); if (etn == null) { return; } @@ -188,352 +155,129 @@ public class ZUGFeRDImporter { } } - public HashMap getAdditionalData() { - return additionalXMLs; + private void prettyPrint(Document document) throws TransformerException { + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = null; + try { + transformer = tf.newTransformer(); + } catch (TransformerConfigurationException e) { + e.printStackTrace(); + } + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + StringWriter writer = new StringWriter(); + transformer.transform(new DOMSource(document), new StreamResult(writer)); + String output = writer.getBuffer().toString();//.replaceAll("\n|\r", ""); + System.err.println(output); } - /** - * needs to be called to be able to call the getters - */ - public void parse() { - DocumentBuilderFactory factory = null; - DocumentBuilder builder = null; - Document document = null; + private Document getDocument() throws ParserConfigurationException, IOException, SAXException, TransformerException { + DocumentBuilderFactory xmlFact = DocumentBuilderFactory.newInstance(); + xmlFact.setNamespaceAware(false); + DocumentBuilder builder = xmlFact.newDocumentBuilder(); + Document doc = builder.parse(new ByteArrayInputStream(rawXML)); + //prettyPrint(doc); + return doc; + } - if (!extractAttempt) { - throw new RuntimeException("extract() or extractLowLevel() must be used before parsing."); - } + private String extractString(String xpathStr) { if (!containsMeta) { - throw new RuntimeException("No suitable data/ZUGFeRD file could be found."); + throw new ZUGFeRDExportException("No suitable data/ZUGFeRD file could be found."); } - - factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); // otherwise we can not act namespace independently, i.e. use - // document.getElementsByTagNameNS("*",... + String result; try { - builder = factory.newDocumentBuilder(); - } catch (ParserConfigurationException ex3) { - // TODO Auto-generated catch block - ex3.printStackTrace(); + Document document = getDocument(); + XPathFactory xpathFact = XPathFactory.newInstance(); + XPath xpath = xpathFact.newXPath(); + result = xpath.evaluate(xpathStr, document); + } catch (ParserConfigurationException e) { + e.printStackTrace(); + throw new ZUGFeRDExportException(e); + } catch (IOException | SAXException | TransformerException | XPathExpressionException e) { + e.printStackTrace(); + throw new ZUGFeRDExportException(e); } - - try { - InputStream bais = new ByteArrayInputStream(rawXML); - document = builder.parse(bais); - } catch (SAXException ex1) { - ex1.printStackTrace(); - } catch (IOException ex2) { - ex2.printStackTrace(); - } - NodeList ndList; - - // rootNode = document.getDocumentElement(); - // ApplicableSupplyChainTradeSettlement - ndList = document.getDocumentElement().getElementsByTagNameNS("*", "PaymentReference"); //$NON-NLS-1$ - - for (int bookingIndex = 0; bookingIndex < ndList.getLength(); bookingIndex++) { - Node booking = ndList.item(bookingIndex); - // if there is a attribute in the tag number:value - - setForeignReference(booking.getTextContent()); - - } - /* - * ndList = document .getElementsByTagName("GermanBankleitzahlID"); - * //$NON-NLS-1$ - * - * for (int bookingIndex = 0; bookingIndex < ndList .getLength(); - * bookingIndex++) { Node booking = ndList.item(bookingIndex); // if there is a - * attribute in the tag number:value setBIC(booking.getTextContent()); - * - * } - * - * ndList = document.getElementsByTagName("ProprietaryID"); //$NON-NLS-1$ - * - * for (int bookingIndex = 0; bookingIndex < ndList .getLength(); - * bookingIndex++) { Node booking = ndList.item(bookingIndex); // if there is a - * attribute in the tag number:value setIBAN(booking.getTextContent()); - * - * } DE1234 - * - * - * DE5656565 Commerzbank - * - * - */ - - /*** - * we should switch to xpath like this // Create XPathFactory object - * XPathFactory xpathFactory = XPathFactory.newInstance(); - * - * // Create XPath object XPath xpath = xpathFactory.newXPath(); XPathExpression - * expr = - * xpath.compile("//*[local-name()=\"GuidelineSpecifiedDocumentContextParameter\"]/[local-name()=\"ID\"]"); - * //evaluate expression result on XML document ndList = (NodeList) - * expr.evaluate(doc, XPathConstants.NODESET); - * - */ - - 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.getLocalName() != null) && (detail.getLocalName().equals("IBANID"))) { //$NON-NLS-1$ - setIBAN(detail.getTextContent()); - } - if ((detail.getLocalName() != null) && (detail.getLocalName().equals("ProprietaryID"))) { //$NON-NLS-1$ - setKTO(detail.getTextContent()); - - } - } - - } - ndList = document.getElementsByTagNameNS("*", "PayeeSpecifiedCreditorFinancialInstitution");// ZF1 //$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.getLocalName() != null) && (detail.getLocalName().equals("BICID"))) { //$NON-NLS-1$ - setBIC(detail.getTextContent()); - } - if ((detail.getLocalName() != null) && (detail.getLocalName().equals("GermanBankleitzahlID"))) { //$NON-NLS-1$ - setBLZ(detail.getTextContent()); - } - if ((detail.getLocalName() != null) && (detail.getLocalName().equals("Name"))) { //$NON-NLS-1$ - setBankName(detail.getTextContent()); - } - } - - } - - ndList = document.getElementsByTagNameNS("*", "SellerTradeParty"); //$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.getLocalName() != null) && (detail.getLocalName().equals("Name"))) { //$NON-NLS-1$ - setHolder(detail.getTextContent()); - } - } - - } - - ndList = document.getElementsByTagNameNS("*", "DuePayableAmount"); //$NON-NLS-1$ - - for (int bookingIndex = 0; bookingIndex < ndList.getLength(); bookingIndex++) { - Node booking = ndList.item(bookingIndex); - // if there is a attribute in the tag number:value - amountFound = true; - setAmount(booking.getTextContent()); - - } - - if (!amountFound) { - /* - * there is apparently no requirement to mention DuePayableAmount,, if it's not - * there, check for GrandTotalAmount - */ - ndList = document.getElementsByTagNameNS("*", "GrandTotalAmount"); //$NON-NLS-1$ - for (int bookingIndex = 0; bookingIndex < ndList.getLength(); bookingIndex++) { - Node booking = ndList.item(bookingIndex); - // if there is a attribute in the tag number:value - amountFound = true; - setAmount(booking.getTextContent()); - - } - - } - - ndList = document.getElementsByTagNameNS("*", "SpecifiedTradePaymentTerms"); //$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.getLocalName() != null) && (detail.getLocalName().equals("DueDateDateTime"))) { //$NON-NLS-1$ - setDueDate(detail.getTextContent().trim()); - } - } - - } - - parsed = true; - } - - /** - * @return if export found parseable ZUGFeRD data - */ - public boolean containsMeta() { - return containsMeta; + return result; } /** * @return the reference (purpose) the sender specified for this invoice */ public String getForeignReference() { - if (!parsed) { - throw new RuntimeException("use extract() before requesting a value"); - } - if (foreignReference == null) { - parse(); - } - return foreignReference; - } - - private void setForeignReference(String foreignReference) { - this.foreignReference = foreignReference; + String result = extractString("//ApplicableHeaderTradeSettlement/PaymentReference"); + if(result == null || result.isEmpty()) + result = extractString("//ApplicableSupplyChainTradeSettlement/PaymentReference"); + return result; } /** * @return the sender's bank's BLZ code */ public String getBLZ() { - if (!parsed) { - throw new RuntimeException("use extract() before requesting a value"); - } - if (BLZ == null) { - parse(); - } - return BLZ; - } - - private void setBLZ(String blz) { - this.BLZ = blz; + return extractString("//PayeeSpecifiedCreditorFinancialInstitution/GermanBankleitzahlID"); } /** * @return the sender's bank's BIC code */ public String getBIC() { - if (!parsed) { - throw new RuntimeException("use extract() before requesting a value"); - } - if (BIC == null) { - parse(); - } - return BIC; - } - - private void setBIC(String bic) { - this.BIC = bic; - } - - private void setDueDate(String dueDate) { - this.dueDate = dueDate; - } - - private void setBankName(String bankname) { - this.bankName = bankname; + return extractString("//PayeeSpecifiedCreditorFinancialInstitution/BICID"); } /** - * @return the sender's IBAN - */ - public String getIBAN() { - if (!parsed) { - throw new RuntimeException("use extract() before requesting a value"); - } - if (IBAN == null) { - parse(); - } - return IBAN; - } - - /** - * @return the sender's KTO - */ - public String getKTO() { - if (!parsed) { - throw new RuntimeException("use extract() before requesting a value"); - } - if (KTO == null) { - parse(); - } - return KTO; - } - - /** - * @return the sender's bank name + * @return the sender's bankname */ public String getBankName() { - if (!parsed) { - throw new RuntimeException("use extract() before requesting a value"); - } - if (bankName == null) { - parse(); - } - return bankName; + return extractString("/CrossIndustryInvoice/SupplyChainTradeTransaction/ApplicableHeaderTradeSettlement/SpecifiedTradeSettlementPaymentMeans/PayeeSpecifiedCreditorFinancialInstitution/Name"); } - private void setIBAN(String IBAN) { - this.IBAN = IBAN; + public String getIBAN() { + return extractString("//PayeePartyCreditorFinancialAccount/IBANID"); } - private void setKTO(String KTO) { - this.KTO = KTO; + public String getKTO() { + return extractString("//PayeePartyCreditorFinancialAccount/ProprietaryID"); } - /** - * @return the name of the owner of the sender's bank account - */ public String getHolder() { - if (rawXML == null) { - throw new RuntimeException("use extract() before requesting a value"); - } - if (holder == null) { - parse(); - } - return holder; - } - - private void setHolder(String holder) { - this.holder = holder; + return extractString("//SellerTradeParty/Name"); } /** * @return the total payable amount */ public String getAmount() { - if (rawXML == null) { - throw new RuntimeException("use extract() before requesting a value"); - } - if (amount == null) { - parse(); - } - return amount; + String result = extractString("//SpecifiedTradeSettlementHeaderMonetarySummation/DuePayableAmount"); + if(result == null || result.isEmpty()) + result = extractString("//SpecifiedTradeSettlementMonetarySummation/GrandTotalAmount"); + return result; } /** * @return when the payment is due */ public String getDueDate() { - if (rawXML == null) { - throw new RuntimeException("use extract() before requesting a value"); - } - if (dueDate == null) { - parse(); - } - return dueDate; + return extractString("//SpecifiedTradePaymentTerms/DueDateDateTime/DateTimeString"); } - private void setAmount(String amount) { - this.amount = amount; + public HashMap getAdditionalData() { + return additionalXMLs; + } + + /** + * get xmp metadata of the PDF, null if not available + * + * @return string + */ + public String getXMP() { + return xmpString; + } + + + /** + * @return if export found parseable ZUGFeRD data + */ + public boolean containsMeta() { + return containsMeta; } /** @@ -604,4 +348,12 @@ public class ZUGFeRDImporter { return (meta != null) && (meta.length() > 0) && ((meta.contains("SpecifiedExchangedDocumentContext") //$NON-NLS-1$ /* ZF1 */ || meta.contains("ExchangedDocumentContext") /* ZF2 */)); } + + static String convertStreamToString(java.io.InputStream is) { + // source https://stackoverflow.com/questions/309424/how-do-i-read-convert-an-inputstream-into-a-string-in-java referring to + // https://community.oracle.com/blogs/pat/2004/10/23/stupid-scanner-tricks + Scanner s = new Scanner(is).useDelimiter("\\A"); + return s.hasNext() ? s.next() : ""; + } + } diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporterException.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporterException.java new file mode 100644 index 00000000..a1ea969f --- /dev/null +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRDImporterException.java @@ -0,0 +1,23 @@ +/** ********************************************************************** + * + * Copyright 2019 ak on 09.04.19. + * + * Use is subject to license terms. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + *********************************************************************** */ +package org.mustangproject.ZUGFeRD; + +public class ZUGFeRDImporterException extends RuntimeException { + +} diff --git a/src/main/java/org/mustangproject/toecount/FileChecker.java b/src/main/java/org/mustangproject/toecount/FileChecker.java index 26142289..9ad2a9d2 100755 --- a/src/main/java/org/mustangproject/toecount/FileChecker.java +++ b/src/main/java/org/mustangproject/toecount/FileChecker.java @@ -49,9 +49,8 @@ public class FileChecker { if ((!isPDF) && (!thisRun.shallIgnoreFileExt())) { return false; } - ZUGFeRDImporter zi = new ZUGFeRDImporter(); + ZUGFeRDImporter zi = new ZUGFeRDImporter(filename); try { - zi.extract(filename); if (zi.canParse()) { thisRun.incZUGFeRDCount(); return true; diff --git a/src/main/java/org/mustangproject/toecount/Toecount.java b/src/main/java/org/mustangproject/toecount/Toecount.java index 6ae88e3d..2cf1c3b3 100755 --- a/src/main/java/org/mustangproject/toecount/Toecount.java +++ b/src/main/java/org/mustangproject/toecount/Toecount.java @@ -406,8 +406,7 @@ public class Toecount { ensureFileNotExists(xmlName); // All params are good! continue... - ZUGFeRDImporter zi = new ZUGFeRDImporter(); - zi.extract(pdfName); + ZUGFeRDImporter zi = new ZUGFeRDImporter(pdfName); byte[] XMLContent = zi.getRawXML(); if (XMLContent == null) { System.err.println("No ZUGFeRD XML found in PDF file"); diff --git a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java index 6a69321f..07b03609 100644 --- a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java +++ b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java @@ -55,14 +55,12 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { // the writing part try { - InputStream SOURCE_PDF = this.getClass() - .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505blanko.pdf"); + InputStream SOURCE_PDF = this.getClass().getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505blanko.pdf"); ZUGFeRDExporter zea1 = new ZUGFeRDExporterFromA1Factory().setProducer("My Application").setCreator("Test").setZUGFeRDConformanceLevel(ZUGFeRDConformanceLevel.EN16931) .load(SOURCE_PDF); - final byte[] UTF8ByteOrderMark = new byte[]{(byte) 0xef, (byte) 0xbb, - (byte) 0xbf}; + final byte[] UTF8ByteOrderMark = new byte[]{(byte) 0xef, (byte) 0xbb, (byte) 0xbf}; /* we have much more information than just in the basic profile (comfort or extended) but it's perfectly valid to provide more information, just not less. */ String ownZUGFeRDXML = new String(UTF8ByteOrderMark) + "\n" + "\n" + @@ -267,41 +265,20 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { assertFalse(pdfContent.indexOf("EN 16931") == -1); } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); } // now check the contents (like MustangReaderTest) - ZUGFeRDImporter zi = new ZUGFeRDImporter(); - zi.extract(TARGET_PDF); + ZUGFeRDImporter zi = new ZUGFeRDImporter(TARGET_PDF); + // Reading ZUGFeRD - - String amount = null; - String bic = null; - String blz = null; - String iban = null; - String kto = null; - String holder = null; - String ref = null; - - if (zi.canParse()) { - zi.parse(); - amount = zi.getAmount(); - blz = zi.getBLZ(); - bic = zi.getBIC(); - iban = zi.getIBAN(); - kto = zi.getKTO(); - holder = zi.getHolder(); - ref = zi.getForeignReference(); - } - - assertEquals(amount, "571.04"); - assertEquals(blz, "41441604"); - assertEquals(bic, "COBADEFFXXX"); - assertEquals(iban, "DE88 2008 0000 0970 3757 00"); - assertEquals(kto, "44421800"); - assertEquals(holder, "Bei Spiel GmbH"); - assertEquals(ref, "RE-20171118/506"); + assertEquals(zi.getAmount(), "571.04"); + assertEquals(zi.getBLZ(), "41441604"); + assertEquals(zi.getBIC(), "COBADEFFXXX"); + assertEquals(zi.getIBAN(), "DE88 2008 0000 0970 3757 00"); + assertEquals(zi.getKTO(), "44421800"); + assertEquals(zi.getHolder(), "Bei Spiel GmbH"); + assertEquals(zi.getForeignReference(), "RE-20171118/506"); } /** @@ -318,8 +295,7 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { // the writing part try { - InputStream SOURCE_PDF = this.getClass() - .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505blanko.pdf"); + InputStream SOURCE_PDF = this.getClass().getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505blanko.pdf"); ZUGFeRDExporter zea1 = new ZUGFeRDExporterFromA1Factory().setProducer("My Application").setCreator("Test").setZUGFeRDConformanceLevel(ZUGFeRDConformanceLevel.BASIC) .load(SOURCE_PDF); @@ -469,41 +445,20 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { assertFalse(pdfContent.indexOf("BASIC") == -1); } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); } // now check the contents (like MustangReaderTest) - ZUGFeRDImporter zi = new ZUGFeRDImporter(); - zi.extract(TARGET_PDF); + ZUGFeRDImporter zi = new ZUGFeRDImporter(TARGET_PDF); + // Reading ZUGFeRD - - String amount = null; - String bic = null; - String blz = null; - String iban = null; - String kto = null; - String holder = null; - String ref = null; - - if (zi.canParse()) { - zi.parse(); - amount = zi.getAmount(); - bic = zi.getBIC(); - blz = zi.getBLZ(); - iban = zi.getIBAN(); - kto = zi.getKTO(); - holder = zi.getHolder(); - ref = zi.getForeignReference(); - } - - assertEquals(amount, "571.04"); - assertEquals(bic, "COBADEFFXXX"); - assertEquals(blz, "41441604"); - assertEquals(iban, "DE88 2008 0000 0970 3757 00"); - assertEquals(kto, "44421800"); - assertEquals(holder, "Bei Spiel GmbH"); - assertEquals(ref, "RE-20170509/505"); + assertEquals(zi.getAmount(), "571.04"); + assertEquals(zi.getBIC(), "COBADEFFXXX"); + assertEquals(zi.getBLZ(), "41441604"); + assertEquals(zi.getIBAN(), "DE88 2008 0000 0970 3757 00"); + assertEquals(zi.getKTO(), "44421800"); + assertEquals(zi.getHolder(), "Bei Spiel GmbH"); + assertEquals(zi.getForeignReference(), "RE-20170509/505"); } } diff --git a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java index 29c29d51..01b99312 100644 --- a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java +++ b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterEdgeTest.java @@ -336,40 +336,18 @@ public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExp */ public void testAImport() throws IOException { - ZUGFeRDImporter zi = new ZUGFeRDImporter(); - zi.extractLowLevel(this.getClass().getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505.pdf")); + InputStream inputStream = this.getClass().getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505.pdf"); + ZUGFeRDImporter zi = new ZUGFeRDImporter(inputStream); + // Reading ZUGFeRD - - String amount = null; - String bic = null; - String blz = null; - String iban = null; - String kto = null; - String holder = null; - String ref = null; - String dueDate = null; - - if (zi.canParse()) { - zi.parse(); - amount = zi.getAmount(); - bic = zi.getBIC(); - blz = zi.getBLZ(); - iban = zi.getIBAN(); - kto = zi.getKTO(); - holder = zi.getHolder(); - dueDate = zi.getDueDate(); - ref = zi.getForeignReference(); - } - - assertEquals(amount, "571.04"); - assertEquals(bic, getOwnBIC()); - assertEquals(blz, getOwnBLZ()); - assertEquals(iban, getOwnIBAN()); - assertEquals(kto, getOwnKto()); - assertEquals(holder, getOwnOrganisationName()); - - assertEquals(dueDate, "20170530"); - assertEquals(ref, getNumber()); + assertEquals(zi.getAmount(), "571.04"); + assertEquals(zi.getBIC(), getOwnBIC()); + assertEquals(zi.getBLZ(), getOwnBLZ()); + assertEquals(zi.getIBAN(), getOwnIBAN()); + assertEquals(zi.getKTO(), getOwnKto()); + assertEquals(zi.getHolder(), getOwnOrganisationName()); + assertEquals(zi.getDueDate(), "20170530"); + assertEquals(zi.getForeignReference(), getNumber()); } @@ -401,37 +379,16 @@ public class MustangReaderWriterEdgeTest extends TestCase implements IZUGFeRDExp } // now check the contents (like MustangReaderTest) - ZUGFeRDImporter zi = new ZUGFeRDImporter(); - zi.extract(TARGET_PDF); + ZUGFeRDImporter zi = new ZUGFeRDImporter(TARGET_PDF); + // Reading ZUGFeRD - - String amount = null; - String bic = null; - String blz = null; - String iban = null; - String kto = null; - String holder = null; - String ref = null; - - if (zi.canParse()) { - zi.parse(); - amount = zi.getAmount(); - bic = zi.getBIC(); - blz = zi.getBLZ(); - iban = zi.getIBAN(); - kto = zi.getKTO(); - holder = zi.getHolder(); - ref = zi.getForeignReference(); - } - - assertEquals(amount, "571.04"); - assertEquals(bic, getOwnBIC()); - assertEquals(blz, getOwnBLZ()); - assertEquals(iban, getOwnIBAN()); - assertEquals(kto, getOwnKto()); - assertEquals(holder, getOwnOrganisationName()); - assertEquals(ref, getNumber()); - + assertEquals(zi.getAmount(), "571.04"); + assertEquals(zi.getBIC(), getOwnBIC()); + assertEquals(zi.getBLZ(), getOwnBLZ()); + assertEquals(zi.getIBAN(), getOwnIBAN()); + assertEquals(zi.getKTO(), getOwnKto()); + assertEquals(zi.getHolder(), getOwnOrganisationName()); + assertEquals(zi.getForeignReference(), getNumber()); } } diff --git a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java index f827bc06..066863c3 100644 --- a/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java +++ b/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterTest.java @@ -346,14 +346,10 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta */ public void testAImport() throws IOException { - ZUGFeRDImporter zi = new ZUGFeRDImporter(); - try (InputStream inputStream = this.getClass() - .getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505.pdf")) { - zi.extractLowLevel(inputStream); - } + InputStream inputStream = this.getClass().getResourceAsStream("/MustangGnuaccountingBeispielRE-20170509_505.pdf"); + ZUGFeRDImporter zi = new ZUGFeRDImporter(inputStream); // Reading ZUGFeRD - String amount = null; String blz = null; String bic = null; @@ -363,7 +359,6 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta String ref = null; if (zi.canParse()) { - zi.parse(); amount = zi.getAmount(); blz = zi.getBLZ(); bic = zi.getBIC(); @@ -384,14 +379,10 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta } public void testForeignImport() throws IOException { - ZUGFeRDImporter zi = new ZUGFeRDImporter(); + InputStream inputStream = this.getClass().getResourceAsStream("/zugferd_invoice.pdf"); + ZUGFeRDImporter zi = new ZUGFeRDImporter(inputStream); - try (InputStream inputStream = this.getClass() - .getResourceAsStream("/zugferd_invoice.pdf")) { - zi.extractLowLevel(inputStream); - } // Reading ZUGFeRD - String amount = zi.getAmount(); assertEquals("\n" + @@ -523,34 +514,17 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta } // now check the contents (like MustangReaderTest) - ZUGFeRDImporter zi = new ZUGFeRDImporter(); - zi.extract(TARGET_PDF); + ZUGFeRDImporter zi = new ZUGFeRDImporter(TARGET_PDF); + // Reading ZUGFeRD - - String amount = null; - String bic = null; - String iban = null; - String kto = null; - String holder = null; - String ref = null; - if (zi.canParse()) { - zi.parse(); - amount = zi.getAmount(); - bic = zi.getBIC(); - iban = zi.getIBAN(); - kto = zi.getKTO(); - holder = zi.getHolder(); - ref = zi.getForeignReference(); - } - - assertEquals(amount, "571.04"); - assertEquals(bic, getOwnBIC()); - assertEquals(iban, getOwnIBAN()); - assertEquals(kto, getOwnKto()); - assertEquals(holder, getOwnOrganisationName()); - assertEquals(ref, getNumber()); - + assertEquals(zi.getAmount(), "571.04"); + assertEquals(zi.getBIC(), getOwnBIC()); + assertEquals(zi.getIBAN(), getOwnIBAN()); + assertEquals(zi.getKTO(), getOwnKto()); + assertEquals(zi.getHolder(), getOwnOrganisationName()); + assertEquals(zi.getForeignReference(), getNumber()); } + /* public void testFXExport() throws Exception { @@ -578,33 +552,15 @@ public class MustangReaderWriterTest extends TestCase implements IZUGFeRDExporta } // now check the contents (like MustangReaderTest) - ZUGFeRDImporter zi = new ZUGFeRDImporter(); - zi.extract(TARGET_PDF); + ZUGFeRDImporter zi = new ZUGFeRDImporter(TARGET_PDF); + // Reading ZUGFeRD - - String amount = null; - String bic = null; - String iban = null; - String kto = null; - String holder = null; - String ref = null; - if (zi.canParse()) { - zi.parse(); - amount = zi.getAmount(); - bic = zi.getBIC(); - iban = zi.getIBAN(); - kto = zi.getKTO(); - holder = zi.getHolder(); - ref = zi.getForeignReference(); - } - - assertEquals(amount, "571.04"); - assertEquals(bic, getOwnBIC()); - assertEquals(iban, getOwnIBAN()); - assertEquals(kto, getOwnKto()); - assertEquals(holder, getOwnOrganisationName()); - assertEquals(ref, getNumber()); - + assertEquals(zi.getAmount(), "571.04"); + assertEquals(zi.getBIC(), getOwnBIC()); + assertEquals(zi.getIBAN(), getOwnIBAN()); + assertEquals(zi.getKTO(), getOwnKto()); + assertEquals(zi.getHolder(), getOwnOrganisationName()); + assertEquals(zi.getForeignReference(), getNumber()); } */ /**