diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementDebit.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementDebit.java index 25b326bc..6dae1fa8 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementDebit.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementDebit.java @@ -24,6 +24,7 @@ public interface IZUGFeRDTradeSettlementDebit extends IZUGFeRDTradeSettlement { + @Override default String getSettlementXML() { @@ -38,6 +39,7 @@ public interface IZUGFeRDTradeSettlementDebit extends IZUGFeRDTradeSettlement { return xml; } + @Override default String getPaymentXML() { return ""+XMLTools.encodeXML(getMandate())+""; } diff --git a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java index b5e46089..47de83cf 100644 --- a/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java +++ b/library/src/main/java/org/mustangproject/ZUGFeRD/IZUGFeRDTradeSettlementPayment.java @@ -66,19 +66,19 @@ public interface IZUGFeRDTradeSettlementPayment extends IZUGFeRDTradeSettlement } - String xml = " " - + " 58" - + " SEPA credit transfer" - + " " - + " " + XMLTools.encodeXML(getOwnIBAN()) + ""; + String xml = "" + + "58" + + "SEPA credit transfer" + + "" + + "" + XMLTools.encodeXML(getOwnIBAN()) + ""; xml+= accountNameStr; - xml+= " " - + " " - + " " + XMLTools.encodeXML(getOwnBIC()) + "" + xml+= "" + + "" + + "" + XMLTools.encodeXML(getOwnBIC()) + "" // + " "+trans.getOwnBankName()+"" // - + " " - + " "; + + "" + + ""; return xml; } diff --git a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java index a12d7c14..0be95e39 100644 --- a/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java +++ b/library/src/test/java/org/mustangproject/ZUGFeRD/MustangReaderWriterCustomXMLTest.java @@ -67,194 +67,194 @@ public class MustangReaderWriterCustomXMLTest extends TestCase { * */ String ownZUGFeRDXML = new String(UTF8ByteOrderMark, StandardCharsets.UTF_8) + "\n" + "\n" + - " \n" + - " false\n" + - " \n" + - " urn:cen.eu:en16931:2017:compliant:factur-x.eu:1p0:extended\n" + - " \n" + - " \n" + - " \n" + - " RE-20171118/506\n" + - " RECHNUNG\n" + - " 380\n" + - " 20171118\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " 1\n" + - " \n" + - " \n" + - " Künstlerische Gestaltung (Stunde): Einer Beispielrechnung\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " 160.0000\n" + - " 1.0000\n" + - " \n" + - " \n" + - " 160.0000\n" + - " 1.0000\n" + - " \n" + - " \n" + - " \n" + - " 1.0000\n" + - " \n" + - " \n" + - " \n" + - " VAT\n" + - " S\n" + - " 7.00\n" + - " \n" + - " \n" + - " 160.00\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " 2\n" + - " \n" + - " \n" + - " Luftballon: Bunt, ca. 500ml\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " 0.7900\n" + - " 1.0000\n" + - " \n" + - " \n" + - " 0.7900\n" + - " 1.0000\n" + - " \n" + - " \n" + - " \n" + - " 400.0000\n" + - " \n" + - " \n" + - " \n" + - " VAT\n" + - " S\n" + - " 19.00\n" + - " \n" + - " \n" + - " 316.00\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " 3\n" + - " \n" + - " \n" + - " Heiße Luft pro Liter\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " 0.1000\n" + - " 1.0000\n" + - " \n" + - " \n" + - " 0.1000\n" + - " 1.0000\n" + - " \n" + - " \n" + - " \n" + - " 200.0000\n" + - " \n" + - " \n" + - " \n" + - " VAT\n" + - " S\n" + - " 19.00\n" + - " \n" + - " \n" + - " 20.00\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " Bei Spiel GmbH\n" + - " \n" + - " 12345\n" + - " Ecke 12\n" + - " Stadthausen\n" + - " DE\n" + - " \n" + - " \n" + - " 22/815/0815/4\n" + - " \n" + - " \n" + - " DE136695976\n" + - " \n" + - " \n" + - " \n" + - " Theodor Est\n" + - " \n" + - " 88802\n" + - " Bahnstr. 42\n" + - " Spielkreis\n" + - " DE\n" + - " \n" + - " \n" + - " DE999999999\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " 20171117\n" + - " \n" + - " \n" + - " \n" + - " RE-20171118/506\n" + - " EUR\n" + - " \n" + - " 42\n" + - " Überweisung\n" + - " \n" + - " DE88 2008 0000 0970 3757 00\n" + - " 44421800\n" + - " \n" + - " \n" + - " COBADEFFXXX\n" + - " 41441604\n" + - " Commerzbank\n" + - " \n" + - " \n" + - " \n" + - " 11.20\n" + - " VAT\n" + - " 160.00\n" + - " S\n" + - " 7.00\n" + - " \n" + - " \n" + - " 63.84\n" + - " VAT\n" + - " 336.00\n" + - " S\n" + - " 19.00\n" + - " \n" + - " \n" + - " Zahlbar ohne Abzug bis 09.12.2017\n" + - " 20171209\n" + - " \n" + - " \n" + - " 496.00\n" + - " 0.00\n" + - " 0.00\n" + - " 496.00\n" + - " 75.04\n" + - " 571.04\n" + - " 571.04\n" + - " \n" + - " \n" + - " \n" + + "\n" + + "false\n" + + "\n" + + "urn:cen.eu:en16931:2017:compliant:factur-x.eu:1p0:extended\n" + + "\n" + + "\n" + + "\n" + + "RE-20171118/506\n" + + "RECHNUNG\n" + + "380\n" + + "20171118\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "1\n" + + "\n" + + "\n" + + "Künstlerische Gestaltung (Stunde): Einer Beispielrechnung\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "160.0000\n" + + "1.0000\n" + + "\n" + + "\n" + + "160.0000\n" + + "1.0000\n" + + "\n" + + "\n" + + "\n" + + "1.0000\n" + + "\n" + + "\n" + + "\n" + + "VAT\n" + + "S\n" + + "7.00\n" + + "\n" + + "\n" + + "160.00\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "2\n" + + "\n" + + "\n" + + "Luftballon: Bunt, ca. 500ml\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "0.7900\n" + + "1.0000\n" + + "\n" + + "\n" + + "0.7900\n" + + "1.0000\n" + + "\n" + + "\n" + + "\n" + + "400.0000\n" + + "\n" + + "\n" + + "\n" + + "VAT\n" + + "S\n" + + "19.00\n" + + "\n" + + "\n" + + "316.00\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "3\n" + + "\n" + + "\n" + + "Heiße Luft pro Liter\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "0.1000\n" + + "1.0000\n" + + "\n" + + "\n" + + "0.1000\n" + + "1.0000\n" + + "\n" + + "\n" + + "\n" + + "200.0000\n" + + "\n" + + "\n" + + "\n" + + "VAT\n" + + "S\n" + + "19.00\n" + + "\n" + + "\n" + + "20.00\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "Bei Spiel GmbH\n" + + "\n" + + "12345\n" + + "Ecke 12\n" + + "Stadthausen\n" + + "DE\n" + + "\n" + + "\n" + + "22/815/0815/4\n" + + "\n" + + "\n" + + "DE136695976\n" + + "\n" + + "\n" + + "\n" + + "Theodor Est\n" + + "\n" + + "88802\n" + + "Bahnstr. 42\n" + + "Spielkreis\n" + + "DE\n" + + "\n" + + "\n" + + "DE999999999\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "20171117\n" + + "\n" + + "\n" + + "\n" + + "RE-20171118/506\n" + + "EUR\n" + + "\n" + + "42\n" + + "Überweisung\n" + + "\n" + + "DE88 2008 0000 0970 3757 00\n" + + "44421800\n" + + "\n" + + "\n" + + "COBADEFFXXX\n" + + "41441604\n" + + "Commerzbank\n" + + "\n" + + "\n" + + "\n" + + "11.20\n" + + "VAT\n" + + "160.00\n" + + "S\n" + + "7.00\n" + + "\n" + + "\n" + + "63.84\n" + + "VAT\n" + + "336.00\n" + + "S\n" + + "19.00\n" + + "\n" + + "\n" + + "Zahlbar ohne Abzug bis 09.12.2017\n" + + "20171209\n" + + "\n" + + "\n" + + "496.00\n" + + "0.00\n" + + "0.00\n" + + "496.00\n" + + "75.04\n" + + "571.04\n" + + "571.04\n" + + "\n" + + "\n" + + "\n" + ""; zea1.setXML(ownZUGFeRDXML.getBytes("UTF-8")); ByteArrayOutputStream baos = new ByteArrayOutputStream(); diff --git a/validator/src/test/java/org/mustangproject/validator/XMLValidatorTest.java b/validator/src/test/java/org/mustangproject/validator/XMLValidatorTest.java index f6d9d91b..e23f1846 100644 --- a/validator/src/test/java/org/mustangproject/validator/XMLValidatorTest.java +++ b/validator/src/test/java/org/mustangproject/validator/XMLValidatorTest.java @@ -3,11 +3,6 @@ package org.mustangproject.validator; import static org.xmlunit.assertj.XmlAssert.assertThat; import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Paths; import javax.xml.transform.Source; @@ -21,9 +16,9 @@ public class XMLValidatorTest extends ResourceCase { // ignored for the // time being - ValidationContext ctx = new ValidationContext(null); - XMLValidator xv = new XMLValidator(ctx); - XPathEngine xpath = new JAXPXPathEngine(); + final ValidationContext ctx = new ValidationContext(null); + final XMLValidator xv = new XMLValidator(ctx); + final XPathEngine xpath = new JAXPXPathEngine(); File tempFile = getResourceAsFile("invalidV2.xml"); Source source; String content; @@ -38,31 +33,31 @@ public class XMLValidatorTest extends ResourceCase { * assertEquals(true, xv.getXMLResult(). * contains("\n" * + - * " Eine Rechnung (INVOICE) muss die Summe der Rechnungspositionen-Nettobeträge „Sum of Invoice line net amount“ (BT-106) enthalten.\n" + * "Eine Rechnung (INVOICE) muss die Summe der Rechnungspositionen-Nettobeträge „Sum of Invoice line net amount“ (BT-106) enthalten.\n" * + * "\n" * + - * " Der Inhalt des Elementes „Invoice total amount without VAT“ (BT-109) entspricht der Summe aller Inhalte der Elemente „Invoice line net amount“ (BT-131) abzüglich der Summe aller in der Rechnung enthaltenen Nachlässe der Dokumentenebene „Sum of allowances on document level“ (BT-107) zuzüglich der Summe aller in der Rechnung enthaltenen Abgaben der Dokumentenebene „Sum of charges on document level“ (BT-108).\n" + * "Der Inhalt des Elementes „Invoice total amount without VAT“ (BT-109) entspricht der Summe aller Inhalte der Elemente „Invoice line net amount“ (BT-131) abzüglich der Summe aller in der Rechnung enthaltenen Nachlässe der Dokumentenebene „Sum of allowances on document level“ (BT-107) zuzüglich der Summe aller in der Rechnung enthaltenen Abgaben der Dokumentenebene „Sum of charges on document level“ (BT-108).\n" * + * "\n" * + - * " Der Inhalt des Elementes „Invoice total amount with VAT“ (BT-112) entspricht der Summe des Inhalts des Elementes „Invoice total amount without VAT“ (BT-109) und des Elementes „Invoice total VAT amount“ (BT-110).\n" + * "Der Inhalt des Elementes „Invoice total amount with VAT“ (BT-112) entspricht der Summe des Inhalts des Elementes „Invoice total amount without VAT“ (BT-109) und des Elementes „Invoice total VAT amount“ (BT-110).\n" * + * "\n" * + - * " Der Inhalt des Elementes „Sum of Invoice line net amount“ (BT-106) entspricht der Summe aller Inhalte der Elemente „Invoice line net amount“ (BT-131).\n" + * "Der Inhalt des Elementes „Sum of Invoice line net amount“ (BT-106) entspricht der Summe aller Inhalte der Elemente „Invoice line net amount“ (BT-131).\n" * + * "\n" * + - * " Eine Rechnung (INVOICE) muss den Erwerbernamen „Buyer name“ (BT-44) enthalten.\n" + * "Eine Rechnung (INVOICE) muss den Erwerbernamen „Buyer name“ (BT-44) enthalten.\n" * + * "\n" - * + " Das Element 'ram:Name' muss genau 1 mal auftreten.\n" + + * + "Das Element 'ram:Name' muss genau 1 mal auftreten.\n" + * "\n" - * + " Das Element 'ram:LineTotalAmount' muss genau 1 mal auftreten.\n" + * + "Das Element 'ram:LineTotalAmount' muss genau 1 mal auftreten.\n" * + * "\n" - * + " Wert von '@unitCode' ist unzulässig.\n" + + * + "Wert von '@unitCode' ist unzulässig.\n" + * "")); * */ @@ -72,7 +67,7 @@ public class XMLValidatorTest extends ResourceCase { xv.setFilename(tempFile.getAbsolutePath()); xv.validate(); - } catch (IrrecoverableValidationError e) { + } catch (final IrrecoverableValidationError e) { noException = false; //expecting a fatal error, i.e. an exception } assertFalse(noException); @@ -87,10 +82,10 @@ public class XMLValidatorTest extends ResourceCase { xv.setFilename(tempFile.getAbsolutePath()); xv.validate(); - } catch (IrrecoverableValidationError e) { + } catch (final IrrecoverableValidationError e) { noException = false; } - String res = xv.getXMLResult(); + final String res = xv.getXMLResult(); /*OutputStream os = null; try { os = new FileOutputStream(new File("return.xml")); @@ -166,7 +161,7 @@ public class XMLValidatorTest extends ResourceCase { source = Input.fromString("" + xv.getXMLResult() + "").build(); content = xpath.evaluate("/validation/summary/@status", source); assertEquals("invalid", content); - } catch (IrrecoverableValidationError e) { + } catch (final IrrecoverableValidationError e) { // ignore, will be in XML output anyway noException = false; } @@ -177,7 +172,7 @@ public class XMLValidatorTest extends ResourceCase { xv.setFilename(tempFile.getAbsolutePath()); xv.validate(); - } catch (IrrecoverableValidationError e) { + } catch (final IrrecoverableValidationError e) { // do expect this! noException = false; } @@ -187,8 +182,8 @@ public class XMLValidatorTest extends ResourceCase { } public void testZF1XMLValidation() { - ValidationContext ctx = new ValidationContext(null); - XMLValidator xv = new XMLValidator(ctx); + final ValidationContext ctx = new ValidationContext(null); + final XMLValidator xv = new XMLValidator(ctx); File tempFile = getResourceAsFile("validV1.xml"); try { xv.setFilename(tempFile.getAbsolutePath()); @@ -205,16 +200,16 @@ public class XMLValidatorTest extends ResourceCase { xv.validate(); assertEquals(true, xv.getXMLResult().contains("