Use UTF-8 when creating new Strings from byte[].
This commit is contained in:
@@ -166,7 +166,7 @@ can be used to get XML
|
||||
```
|
||||
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
|
||||
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.
|
||||
### Embedding ZF1 to ZF2 migration
|
||||
|
||||
@@ -182,7 +182,7 @@ public class DAPullProvider extends ZUGFeRD2PullProvider {
|
||||
// Additional Documents of XRechnung (Rechnungsbegruendende Unterlagen - BG-24 XRechnung)
|
||||
if (trans.getAdditionalReferencedDocuments() != null) {
|
||||
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>"
|
||||
+ "<ram:IssuerAssignedID>" + f.getFilename() + "</ram:IssuerAssignedID>"
|
||||
+ "<ram:TypeCode>916</ram:TypeCode>"
|
||||
|
||||
@@ -257,7 +257,7 @@ public class OXPullProvider extends ZUGFeRD2PullProvider {
|
||||
// Additional Documents of XRechnung (Rechnungsbegruendende Unterlagen - BG-24 XRechnung)
|
||||
if (trans.getAdditionalReferencedDocuments() != null) {
|
||||
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>"
|
||||
+ "<ram:IssuerAssignedID>" + f.getFilename() + "</ram:IssuerAssignedID>"
|
||||
+ "<ram:TypeCode>916</ram:TypeCode>"
|
||||
|
||||
@@ -117,7 +117,7 @@ public class UBLDAPullProvider implements IXMLProvider {
|
||||
final StringWriter sw = new StringWriter();
|
||||
Document document = null;
|
||||
try {
|
||||
document = DocumentHelper.parseText(new String(ublData));
|
||||
document = DocumentHelper.parseText(new String(ublData, StandardCharsets.UTF_8));
|
||||
} catch (final DocumentException e1) {
|
||||
LOGGER.error ("Failed to parse UBL", e1);
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ public class ZUGFeRD1PullProvider extends ZUGFeRD2PullProvider {
|
||||
final StringWriter sw = new StringWriter();
|
||||
Document document = null;
|
||||
try {
|
||||
document = DocumentHelper.parseText(new String(zugferdData));
|
||||
document = DocumentHelper.parseText(new String(zugferdData, StandardCharsets.UTF_8));
|
||||
} catch (final DocumentException e1) {
|
||||
LOGGER.error ("Failed to parse ZUGFeRD data", e1);
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
|
||||
final StringWriter sw = new StringWriter();
|
||||
Document document = null;
|
||||
try {
|
||||
document = DocumentHelper.parseText(new String(zugferdData));
|
||||
document = DocumentHelper.parseText(new String(zugferdData, StandardCharsets.UTF_8));
|
||||
} catch (final DocumentException 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)
|
||||
if (trans.getAdditionalReferencedDocuments() != null) {
|
||||
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>"
|
||||
+ "<ram:IssuerAssignedID>" + f.getFilename() + "</ram:IssuerAssignedID>"
|
||||
+ "<ram:TypeCode>916</ram:TypeCode>"
|
||||
|
||||
@@ -14,6 +14,7 @@ package org.mustangproject.ZUGFeRD;
|
||||
* @author jstaerk
|
||||
*/
|
||||
import java.io.*;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
@@ -479,7 +480,7 @@ public class ZUGFeRDImporter extends ZUGFeRDInvoiceImporter {
|
||||
return null;
|
||||
}
|
||||
|
||||
return new String(rawXML);
|
||||
return new String(rawXML, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1223,7 +1223,7 @@ public class ZUGFeRDInvoiceImporter {
|
||||
return null;
|
||||
}
|
||||
if (rawXML.length < 3) {
|
||||
return new String(rawXML);
|
||||
return new String(rawXML, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import javax.xml.transform.Source;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
@@ -292,7 +293,7 @@ public class CalculationTest extends ResourceCase {
|
||||
zf2p.generateXML(invoice);
|
||||
|
||||
|
||||
String theXML = new String(zf2p.getXML());
|
||||
String theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
|
||||
assertThat(theXML).valueByXPath("//*[local-name()='ActualAmount']")
|
||||
.asString()
|
||||
.isEqualTo("0.55");// test for issue #917
|
||||
@@ -346,7 +347,7 @@ public class CalculationTest extends ResourceCase {
|
||||
zf2p.generateXML(invoice);
|
||||
|
||||
|
||||
String theXML = new String(zf2p.getXML());
|
||||
String theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
|
||||
assertThat(theXML).valueByXPath("//*[local-name()='ActualAmount']")
|
||||
.asString()
|
||||
.isEqualTo("0.55");// test for issue #917
|
||||
|
||||
@@ -300,7 +300,7 @@ public class DeSerializationTest extends ResourceCase {
|
||||
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
|
||||
zf2p.setProfile(Profiles.getByName("XRechnung"));
|
||||
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(base64));
|
||||
|
||||
@@ -539,7 +539,7 @@ public class DeSerializationTest extends ResourceCase {
|
||||
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
|
||||
zf2p.setProfile(Profiles.getByName("XRechnung"));
|
||||
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>"));
|
||||
|
||||
}
|
||||
@@ -920,7 +920,7 @@ public class DeSerializationTest extends ResourceCase {
|
||||
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
|
||||
zf2p.setProfile(Profiles.getByName("XRechnung"));
|
||||
zf2p.generateXML(fromJSON);
|
||||
theXML = new String(zf2p.getXML());
|
||||
theXML = new String(zf2p.getXML(), StandardCharsets.UTF_8);
|
||||
} catch (Exception e) {
|
||||
exceptions = true;
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ public class ZF2PushTest extends TestCase {
|
||||
.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))
|
||||
);
|
||||
String theXML = new String(ze.getProvider().getXML());
|
||||
String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
|
||||
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
|
||||
ze.export(TARGET_ATTACHMENTSPDF);
|
||||
} catch (IOException e) {
|
||||
@@ -222,7 +222,7 @@ public class ZF2PushTest extends TestCase {
|
||||
.setNumber(number)
|
||||
.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();
|
||||
ZUGFeRDInvoiceImporter zii = new ZUGFeRDInvoiceImporter(new ByteArrayInputStream(theXML.getBytes(StandardCharsets.UTF_8)));
|
||||
zii.extractInto(read);
|
||||
@@ -266,7 +266,7 @@ public class ZF2PushTest extends TestCase {
|
||||
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"));
|
||||
ze.export(TARGET_ITEMGROSS);
|
||||
} catch (IOException e) {
|
||||
@@ -332,7 +332,7 @@ public class ZF2PushTest extends TestCase {
|
||||
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"));
|
||||
ze.export(TARGET_ITEMCHARGESALLOWANCESPDF);
|
||||
} 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)))
|
||||
);
|
||||
|
||||
String theXML = new String(ze.getProvider().getXML());
|
||||
String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
|
||||
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
|
||||
ze.export(TARGET_INTRACOMMUNITYSUPPLYPDF);
|
||||
} catch (IOException e) {
|
||||
@@ -439,7 +439,7 @@ public class ZF2PushTest extends TestCase {
|
||||
.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)))
|
||||
);
|
||||
String theXML = new String(ze.getProvider().getXML());
|
||||
String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
|
||||
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
|
||||
ze.export(TARGET_INTRACOMMUNITYSUPPLYMANUALPDF);
|
||||
} 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)))
|
||||
);
|
||||
|
||||
String theXML = new String(ze.getProvider().getXML());
|
||||
String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
|
||||
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
|
||||
ze.export(TARGET_REVERSECHARGEPDF);
|
||||
} 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"))
|
||||
.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"));
|
||||
ze.export(TARGET_CHARGESALLOWANCESPDF);
|
||||
} catch (IOException e) {
|
||||
@@ -615,7 +615,7 @@ public class ZF2PushTest extends TestCase {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
String theXML = new String(ze.getProvider().getXML());
|
||||
String theXML = new String(ze.getProvider().getXML(), StandardCharsets.UTF_8);
|
||||
assertTrue(theXML.contains("<rsm:CrossIndustryInvoice"));
|
||||
ze.export(TARGET_PUSHEDGE);
|
||||
} 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))))
|
||||
.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"));
|
||||
ze.export(TARGET_ALLOWANCESPDF);
|
||||
} 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"))
|
||||
.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"));
|
||||
ze.export(TARGET_RELATIVECHARGESALLOWANCESPDF);
|
||||
} 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)).setCorrection("0815");
|
||||
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"));
|
||||
ze.export(TARGET_CORRECTIONPDF);
|
||||
} 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)).setCreditNote();
|
||||
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"));
|
||||
ze.export(TARGET_CREDITNOTEPDF);
|
||||
} catch (IOException e) {
|
||||
@@ -905,7 +905,7 @@ public class ZF2PushTest extends TestCase {
|
||||
.setInvoiceReferencedDocumentID("");
|
||||
|
||||
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:BuyerOrderReferencedDocument"));
|
||||
@@ -921,7 +921,7 @@ public class ZF2PushTest extends TestCase {
|
||||
.setInvoiceReferencedDocumentID(" ");
|
||||
|
||||
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:BuyerOrderReferencedDocument"));
|
||||
|
||||
@@ -24,6 +24,7 @@ package org.mustangproject.ZUGFeRD;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
@@ -175,7 +176,7 @@ public class ZF2Test extends MustangReaderTestCase {
|
||||
.load(SOURCE_PDF)) {
|
||||
|
||||
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"));
|
||||
ze.export(TARGET_PDF);
|
||||
} catch (final IOException e) {
|
||||
|
||||
@@ -301,7 +301,7 @@ public class ZUGFeRDValidator {
|
||||
StringWriter sw = new StringWriter();
|
||||
org.dom4j.Document document = null;
|
||||
try {
|
||||
document = DocumentHelper.parseText(new String(finalStringResult));
|
||||
document = DocumentHelper.parseText(finalStringResult.toString());
|
||||
} catch (DocumentException e1) {
|
||||
LOGGER.error(e1.getMessage());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user