Merge pull request #944 from langfr/bugfix/StringCreation

Use UTF-8 when creating new Strings from byte[].
This commit is contained in:
Jochen Staerk
2025-10-08 13:44:35 +02:00
committed by GitHub
13 changed files with 34 additions and 31 deletions

View File

@@ -166,7 +166,7 @@ can be used to get XML
``` ```
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider(); ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
zf2p.generateXML(i); zf2p.generateXML(i);
String theXML = new String(zf2p.getXML()); String theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
``` ```
or can also be used with setTransaction to generate invoice PDFs straight away. or can also be used with setTransaction to generate invoice PDFs straight away.
### Embedding ZF1 to ZF2 migration ### Embedding ZF1 to ZF2 migration

View File

@@ -182,7 +182,7 @@ public class DAPullProvider extends ZUGFeRD2PullProvider {
// Additional Documents of XRechnung (Rechnungsbegruendende Unterlagen - BG-24 XRechnung) // Additional Documents of XRechnung (Rechnungsbegruendende Unterlagen - BG-24 XRechnung)
if (trans.getAdditionalReferencedDocuments() != null) { if (trans.getAdditionalReferencedDocuments() != null) {
for (final FileAttachment f : trans.getAdditionalReferencedDocuments()) { for (final FileAttachment f : trans.getAdditionalReferencedDocuments()) {
final String documentContent = new String(Base64.getEncoder().encodeToString(f.getData())); final String documentContent = Base64.getEncoder().encodeToString(f.getData());
xml += "<ram:AdditionalReferencedDocument>" xml += "<ram:AdditionalReferencedDocument>"
+ "<ram:IssuerAssignedID>" + f.getFilename() + "</ram:IssuerAssignedID>" + "<ram:IssuerAssignedID>" + f.getFilename() + "</ram:IssuerAssignedID>"
+ "<ram:TypeCode>916</ram:TypeCode>" + "<ram:TypeCode>916</ram:TypeCode>"

View File

@@ -257,7 +257,7 @@ public class OXPullProvider extends ZUGFeRD2PullProvider {
// Additional Documents of XRechnung (Rechnungsbegruendende Unterlagen - BG-24 XRechnung) // Additional Documents of XRechnung (Rechnungsbegruendende Unterlagen - BG-24 XRechnung)
if (trans.getAdditionalReferencedDocuments() != null) { if (trans.getAdditionalReferencedDocuments() != null) {
for (final FileAttachment f : trans.getAdditionalReferencedDocuments()) { for (final FileAttachment f : trans.getAdditionalReferencedDocuments()) {
final String documentContent = new String(Base64.getEncoder().encodeToString(f.getData())); final String documentContent = Base64.getEncoder().encodeToString(f.getData());
xml += "<ram:AdditionalReferencedDocument>" xml += "<ram:AdditionalReferencedDocument>"
+ "<ram:IssuerAssignedID>" + f.getFilename() + "</ram:IssuerAssignedID>" + "<ram:IssuerAssignedID>" + f.getFilename() + "</ram:IssuerAssignedID>"
+ "<ram:TypeCode>916</ram:TypeCode>" + "<ram:TypeCode>916</ram:TypeCode>"

View File

@@ -117,7 +117,7 @@ public class UBLDAPullProvider implements IXMLProvider {
final StringWriter sw = new StringWriter(); final StringWriter sw = new StringWriter();
Document document = null; Document document = null;
try { try {
document = DocumentHelper.parseText(new String(ublData)); document = DocumentHelper.parseText(new String(ublData, StandardCharsets.UTF_8));
} catch (final DocumentException e1) { } catch (final DocumentException e1) {
LOGGER.error ("Failed to parse UBL", e1); LOGGER.error ("Failed to parse UBL", e1);
} }

View File

@@ -91,7 +91,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider {
final StringWriter sw = new StringWriter(); final StringWriter sw = new StringWriter();
Document document = null; Document document = null;
try { try {
document = DocumentHelper.parseText(new String(zugferdData)); document = DocumentHelper.parseText(new String(zugferdData, StandardCharsets.UTF_8));
} catch (final DocumentException e1) { } catch (final DocumentException e1) {
LOGGER.error ("Failed to parse ZUGFeRD data", e1); LOGGER.error ("Failed to parse ZUGFeRD data", e1);
} }

View File

@@ -95,7 +95,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
final StringWriter sw = new StringWriter(); final StringWriter sw = new StringWriter();
Document document = null; Document document = null;
try { try {
document = DocumentHelper.parseText(new String(zugferdData)); document = DocumentHelper.parseText(new String(zugferdData, StandardCharsets.UTF_8));
} catch (final DocumentException e1) { } catch (final DocumentException e1) {
LOGGER.error("Failed to parse ZUGFeRD data", e1); LOGGER.error("Failed to parse ZUGFeRD data", e1);
} }
@@ -620,7 +620,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
// Additional Documents of XRechnung (Rechnungsbegruendende Unterlagen - BG-24 XRechnung) // Additional Documents of XRechnung (Rechnungsbegruendende Unterlagen - BG-24 XRechnung)
if (trans.getAdditionalReferencedDocuments() != null) { if (trans.getAdditionalReferencedDocuments() != null) {
for (final FileAttachment f : trans.getAdditionalReferencedDocuments()) { for (final FileAttachment f : trans.getAdditionalReferencedDocuments()) {
final String documentContent = new String(Base64.getEncoder().encodeToString(f.getData())); final String documentContent = Base64.getEncoder().encodeToString(f.getData());
xml += "<ram:AdditionalReferencedDocument>" xml += "<ram:AdditionalReferencedDocument>"
+ "<ram:IssuerAssignedID>" + f.getFilename() + "</ram:IssuerAssignedID>" + "<ram:IssuerAssignedID>" + f.getFilename() + "</ram:IssuerAssignedID>"
+ "<ram:TypeCode>916</ram:TypeCode>" + "<ram:TypeCode>916</ram:TypeCode>"

View File

@@ -14,6 +14,7 @@ package org.mustangproject.ZUGFeRD;
* @author jstaerk * @author jstaerk
*/ */
import java.io.*; import java.io.*;
import java.nio.charset.StandardCharsets;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
@@ -479,7 +480,7 @@ public class ZUGFeRDImporter extends ZUGFeRDInvoiceImporter {
return null; return null;
} }
return new String(rawXML); return new String(rawXML, StandardCharsets.UTF_8);
} }

View File

@@ -1275,7 +1275,7 @@ public class ZUGFeRDInvoiceImporter {
return null; return null;
} }
if (rawXML.length < 3) { if (rawXML.length < 3) {
return new String(rawXML); return new String(rawXML, StandardCharsets.UTF_8);
} }

View File

@@ -17,6 +17,7 @@ import javax.xml.transform.Source;
import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathExpressionException;
import java.io.*; import java.io.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
@@ -292,7 +293,7 @@ public class CalculationTest extends ResourceCase {
zf2p.generateXML(invoice); zf2p.generateXML(invoice);
String theXML = new String(zf2p.getXML()); String theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
assertThat(theXML).valueByXPath("//*[local-name()='ActualAmount']") assertThat(theXML).valueByXPath("//*[local-name()='ActualAmount']")
.asString() .asString()
.isEqualTo("0.55");// test for issue #917 .isEqualTo("0.55");// test for issue #917
@@ -346,7 +347,7 @@ public class CalculationTest extends ResourceCase {
zf2p.generateXML(invoice); zf2p.generateXML(invoice);
String theXML = new String(zf2p.getXML()); String theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
assertThat(theXML).valueByXPath("//*[local-name()='ActualAmount']") assertThat(theXML).valueByXPath("//*[local-name()='ActualAmount']")
.asString() .asString()
.isEqualTo("0.55");// test for issue #917 .isEqualTo("0.55");// test for issue #917

View File

@@ -300,7 +300,7 @@ public class DeSerializationTest extends ResourceCase {
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider(); ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
zf2p.setProfile(Profiles.getByName("XRechnung")); zf2p.setProfile(Profiles.getByName("XRechnung"));
zf2p.generateXML(newInvoiceFromJSON); zf2p.generateXML(newInvoiceFromJSON);
String theXML = new String(zf2p.getXML()); String theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<udt:DateTimeString format=\"102\">20180304</udt:DateTimeString>")); assertTrue(theXML.contains("<udt:DateTimeString format=\"102\">20180304</udt:DateTimeString>"));
assertTrue(theXML.contains(base64)); assertTrue(theXML.contains(base64));
@@ -553,7 +553,7 @@ public class DeSerializationTest extends ResourceCase {
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider(); ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
zf2p.setProfile(Profiles.getByName("XRechnung")); zf2p.setProfile(Profiles.getByName("XRechnung"));
zf2p.generateXML(fromJSON); zf2p.generateXML(fromJSON);
String theXML = new String(zf2p.getXML()); String theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<udt:DateTimeString format=\"102\">20241026</udt:DateTimeString>")); assertTrue(theXML.contains("<udt:DateTimeString format=\"102\">20241026</udt:DateTimeString>"));
} }
@@ -934,7 +934,7 @@ public class DeSerializationTest extends ResourceCase {
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider(); ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
zf2p.setProfile(Profiles.getByName("XRechnung")); zf2p.setProfile(Profiles.getByName("XRechnung"));
zf2p.generateXML(fromJSON); zf2p.generateXML(fromJSON);
theXML = new String(zf2p.getXML()); theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
} catch (Exception e) { } catch (Exception e) {
exceptions = true; exceptions = true;
} }

View File

@@ -162,7 +162,7 @@ public class ZF2PushTest extends TestCase {
.setNumber(number) .setNumber(number)
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(0)).setTaxExemptionReason("Kleinunternehmer gemäß §19 UStG").setTaxCategoryCode("E"), price, new BigDecimal(1.0)).addNote(theNote)) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(0)).setTaxExemptionReason("Kleinunternehmer gemäß §19 UStG").setTaxCategoryCode("E"), price, new BigDecimal(1.0)).addNote(theNote))
); );
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_ATTACHMENTSPDF); ze.export(TARGET_ATTACHMENTSPDF);
} catch (IOException e) { } catch (IOException e) {
@@ -222,7 +222,7 @@ public class ZF2PushTest extends TestCase {
.setNumber(number) .setNumber(number)
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0)))
); );
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
Invoice read = new Invoice(); Invoice read = new Invoice();
ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter(new ByteArrayInputStream(theXML.getBytes(StandardCharsets.UTF_8))); ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter(new ByteArrayInputStream(theXML.getBytes(StandardCharsets.UTF_8)));
zii.extractInto(read); zii.extractInto(read);
@@ -266,7 +266,7 @@ public class ZF2PushTest extends TestCase {
ze.setTransaction(i); ze.setTransaction(i);
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_ITEMGROSS); ze.export(TARGET_ITEMGROSS);
} catch (IOException e) { } catch (IOException e) {
@@ -332,7 +332,7 @@ public class ZF2PushTest extends TestCase {
ze.setTransaction(i); ze.setTransaction(i);
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_ITEMCHARGESALLOWANCESPDF); ze.export(TARGET_ITEMCHARGESALLOWANCESPDF);
} catch (IOException e) { } catch (IOException e) {
@@ -387,7 +387,7 @@ public class ZF2PushTest extends TestCase {
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)).setIntraCommunitySupply(), price, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)).setIntraCommunitySupply(), price, new BigDecimal(1.0)))
); );
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_INTRACOMMUNITYSUPPLYPDF); ze.export(TARGET_INTRACOMMUNITYSUPPLYPDF);
} catch (IOException e) { } catch (IOException e) {
@@ -439,7 +439,7 @@ public class ZF2PushTest extends TestCase {
.setNumber(number) .setNumber(number)
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(0)).setTaxExemptionReason("Kein Ausweis der Umsatzsteuer bei innergemeinschaftlichen Lieferungen").setTaxCategoryCode("K"), price, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(0)).setTaxExemptionReason("Kein Ausweis der Umsatzsteuer bei innergemeinschaftlichen Lieferungen").setTaxCategoryCode("K"), price, new BigDecimal(1.0)))
); );
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_INTRACOMMUNITYSUPPLYMANUALPDF); ze.export(TARGET_INTRACOMMUNITYSUPPLYMANUALPDF);
} catch (IOException e) { } catch (IOException e) {
@@ -500,7 +500,7 @@ public class ZF2PushTest extends TestCase {
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)).setReverseCharge(), price, new BigDecimal(1.0))) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)).setReverseCharge(), price, new BigDecimal(1.0)))
); );
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_REVERSECHARGEPDF); ze.export(TARGET_REVERSECHARGEPDF);
} catch (IOException e) { } catch (IOException e) {
@@ -547,7 +547,7 @@ public class ZF2PushTest extends TestCase {
.addCharge(new Charge(new BigDecimal(0.5)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK")) .addCharge(new Charge(new BigDecimal(0.5)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK"))
.addAllowance(new Allowance(new BigDecimal(0.2)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK")) .addAllowance(new Allowance(new BigDecimal(0.2)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK"))
); );
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_CHARGESALLOWANCESPDF); ze.export(TARGET_CHARGESALLOWANCESPDF);
} catch (IOException e) { } catch (IOException e) {
@@ -615,7 +615,7 @@ public class ZF2PushTest extends TestCase {
e.printStackTrace(); e.printStackTrace();
} }
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_PUSHEDGE); ze.export(TARGET_PUSHEDGE);
} catch (IOException e) { } catch (IOException e) {
@@ -698,7 +698,7 @@ public class ZF2PushTest extends TestCase {
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)).addAllowance(new Allowance(BigDecimal.ONE)), new BigDecimal(500.0), qty).addAllowance(new Allowance(new BigDecimal(300)).setTaxPercent(new BigDecimal(19)))) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)).addAllowance(new Allowance(BigDecimal.ONE)), new BigDecimal(500.0), qty).addAllowance(new Allowance(new BigDecimal(300)).setTaxPercent(new BigDecimal(19))))
.addAllowance(new Allowance(new BigDecimal(600)).setTaxPercent(new BigDecimal(19))) .addAllowance(new Allowance(new BigDecimal(600)).setTaxPercent(new BigDecimal(19)))
); );
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_ALLOWANCESPDF); ze.export(TARGET_ALLOWANCESPDF);
} catch (IOException e) { } catch (IOException e) {
@@ -744,7 +744,7 @@ public class ZF2PushTest extends TestCase {
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))).addCharge(new Charge().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK")) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, new BigDecimal(1.0))).addCharge(new Charge().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReasonCode("ABK"))
.addAllowance(new Allowance().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReason("Mengenrabatt")) .addAllowance(new Allowance().setPercent(new BigDecimal(50)).setTaxPercent(new BigDecimal(19)).setReason("Mengenrabatt"))
); );
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_RELATIVECHARGESALLOWANCESPDF); ze.export(TARGET_RELATIVECHARGESALLOWANCESPDF);
} catch (IOException e) { } catch (IOException e) {
@@ -794,7 +794,7 @@ public class ZF2PushTest extends TestCase {
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, qty)) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, qty))
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, qty)).setCorrection("0815"); .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, qty)).setCorrection("0815");
ze.setTransaction(i); ze.setTransaction(i);
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_CORRECTIONPDF); ze.export(TARGET_CORRECTIONPDF);
} catch (IOException e) { } catch (IOException e) {
@@ -845,7 +845,7 @@ public class ZF2PushTest extends TestCase {
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, qty)) .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, qty))
.addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, qty)).setCreditNote(); .addItem(new Item(new Product("Testprodukt", "", "H87", new BigDecimal(19)), price, qty)).setCreditNote();
ze.setTransaction(i); ze.setTransaction(i);
String theXML = new String(ze.getProvider().getXML()); String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_CREDITNOTEPDF); ze.export(TARGET_CREDITNOTEPDF);
} catch (IOException e) { } catch (IOException e) {
@@ -905,7 +905,7 @@ public class ZF2PushTest extends TestCase {
.setInvoiceReferencedDocumentID(""); .setInvoiceReferencedDocumentID("");
zf2p.generateXML(i); zf2p.generateXML(i);
String theXML = new String(zf2p.getXML()); String theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
assertFalse(theXML.contains("<ram:SellerOrderReferencedDocument")); assertFalse(theXML.contains("<ram:SellerOrderReferencedDocument"));
assertFalse(theXML.contains("<ram:BuyerOrderReferencedDocument")); assertFalse(theXML.contains("<ram:BuyerOrderReferencedDocument"));
@@ -921,7 +921,7 @@ public class ZF2PushTest extends TestCase {
.setInvoiceReferencedDocumentID(" "); .setInvoiceReferencedDocumentID(" ");
zf2p.generateXML(i); zf2p.generateXML(i);
theXML = new String(zf2p.getXML()); theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
assertFalse(theXML.contains("<ram:SellerOrderReferencedDocument")); assertFalse(theXML.contains("<ram:SellerOrderReferencedDocument"));
assertFalse(theXML.contains("<ram:BuyerOrderReferencedDocument")); assertFalse(theXML.contains("<ram:BuyerOrderReferencedDocument"));

View File

@@ -24,6 +24,7 @@ package org.mustangproject.ZUGFeRD;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
@@ -175,7 +176,7 @@ public class ZF2Test extends MustangReaderTestCase {
.load(SOURCE_PDF)) { .load(SOURCE_PDF)) {
ze.setTransaction(this); ze.setTransaction(this);
final String theXML = new String(ze.getProvider().getXML()); final String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice")); assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
ze.export(TARGET_PDF); ze.export(TARGET_PDF);
} catch (final IOException e) { } catch (final IOException e) {

View File

@@ -301,7 +301,7 @@ public class ZUGFeRDValidator {
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();
org.dom4j.Document document = null; org.dom4j.Document document = null;
try { try {
document = DocumentHelper.parseText(new String(finalStringResult)); document = DocumentHelper.parseText(finalStringResult.toString());
} catch (DocumentException e1) { } catch (DocumentException e1) {
LOGGER.error(e1.getMessage()); LOGGER.error(e1.getMessage());
} }