Suppress pmpty nodes in output XML

This commit is contained in:
langfr
2025-06-03 12:46:11 +01:00
parent 7f4a8f0073
commit 41bf79cd55
2 changed files with 52 additions and 5 deletions

View File

@@ -589,19 +589,19 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
xml += getTradePartyAsXML(trans.getRecipient(), false, false); xml += getTradePartyAsXML(trans.getRecipient(), false, false);
xml += "</ram:BuyerTradeParty>"; xml += "</ram:BuyerTradeParty>";
if (trans.getSellerOrderReferencedDocumentID() != null) { if (trans.getSellerOrderReferencedDocumentID() != null && !trans.getSellerOrderReferencedDocumentID().trim().isEmpty()) {
xml += "<ram:SellerOrderReferencedDocument>" xml += "<ram:SellerOrderReferencedDocument>"
+ "<ram:IssuerAssignedID>" + "<ram:IssuerAssignedID>"
+ XMLTools.encodeXML(trans.getSellerOrderReferencedDocumentID()) + "</ram:IssuerAssignedID>" + XMLTools.encodeXML(trans.getSellerOrderReferencedDocumentID()) + "</ram:IssuerAssignedID>"
+ "</ram:SellerOrderReferencedDocument>"; + "</ram:SellerOrderReferencedDocument>";
} }
if (trans.getBuyerOrderReferencedDocumentID() != null) { if (trans.getBuyerOrderReferencedDocumentID() != null && !trans.getBuyerOrderReferencedDocumentID().trim().isEmpty()) {
xml += "<ram:BuyerOrderReferencedDocument>" xml += "<ram:BuyerOrderReferencedDocument>"
+ "<ram:IssuerAssignedID>" + "<ram:IssuerAssignedID>"
+ XMLTools.encodeXML(trans.getBuyerOrderReferencedDocumentID()) + "</ram:IssuerAssignedID>" + XMLTools.encodeXML(trans.getBuyerOrderReferencedDocumentID()) + "</ram:IssuerAssignedID>"
+ "</ram:BuyerOrderReferencedDocument>"; + "</ram:BuyerOrderReferencedDocument>";
} }
if (trans.getContractReferencedDocument() != null) { if (trans.getContractReferencedDocument() != null && !trans.getContractReferencedDocument().trim().isEmpty()) {
xml += "<ram:ContractReferencedDocument>" xml += "<ram:ContractReferencedDocument>"
+ "<ram:IssuerAssignedID>" + "<ram:IssuerAssignedID>"
+ XMLTools.encodeXML(trans.getContractReferencedDocument()) + "</ram:IssuerAssignedID>" + XMLTools.encodeXML(trans.getContractReferencedDocument()) + "</ram:IssuerAssignedID>"
@@ -655,7 +655,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
* "<ID>2013-51112</ID>" + * "<ID>2013-51112</ID>" +
* "</DeliveryNoteReferencedDocument>" * "</DeliveryNoteReferencedDocument>"
*/ */
if (trans.getDespatchAdviceReferencedDocumentID() != null) { if (trans.getDespatchAdviceReferencedDocumentID() != null && !trans.getDespatchAdviceReferencedDocumentID().trim().isEmpty()) {
xml += "<ram:DespatchAdviceReferencedDocument>"; xml += "<ram:DespatchAdviceReferencedDocument>";
xml += "<ram:IssuerAssignedID>" + XMLTools.encodeXML(trans.getDespatchAdviceReferencedDocumentID()) + "</ram:IssuerAssignedID>"; xml += "<ram:IssuerAssignedID>" + XMLTools.encodeXML(trans.getDespatchAdviceReferencedDocumentID()) + "</ram:IssuerAssignedID>";
xml += "</ram:DespatchAdviceReferencedDocument>"; xml += "</ram:DespatchAdviceReferencedDocument>";
@@ -888,7 +888,7 @@ public class ZUGFeRD2PullProvider implements IXMLProvider {
} }
xml += "<ram:DuePayableAmount>" + currencyFormat(calc.getDuePayable()) + "</ram:DuePayableAmount>" xml += "<ram:DuePayableAmount>" + currencyFormat(calc.getDuePayable()) + "</ram:DuePayableAmount>"
+ "</ram:SpecifiedTradeSettlementHeaderMonetarySummation>"; + "</ram:SpecifiedTradeSettlementHeaderMonetarySummation>";
if (trans.getInvoiceReferencedDocumentID() != null) { if (trans.getInvoiceReferencedDocumentID() != null && !trans.getInvoiceReferencedDocumentID().trim().isEmpty()) {
xml += "<ram:InvoiceReferencedDocument>" xml += "<ram:InvoiceReferencedDocument>"
+ "<ram:IssuerAssignedID>" + "<ram:IssuerAssignedID>"
+ XMLTools.encodeXML(trans.getInvoiceReferencedDocumentID()) + "</ram:IssuerAssignedID>"; + XMLTools.encodeXML(trans.getInvoiceReferencedDocumentID()) + "</ram:IssuerAssignedID>";

View File

@@ -816,4 +816,51 @@ public class ZF2PushTest extends TestCase {
} }
} }
public void testEmptyDocumentReference() {
String orgname = "Test company";
String number = "123";
BigDecimal price = new BigDecimal(1.0);
BigDecimal qty = new BigDecimal(1.0);
ZUGFeRD2PullProvider zf2p = new ZUGFeRD2PullProvider();
zf2p.setProfile( Profiles.getByName( "XRechnung" ) );
Invoice i = new Invoice().setIssueDate(new Date()).setDueDate(new Date()).setDetailedDeliveryPeriod(new Date(), new Date()).setDeliveryDate(new Date())
.setSender(new TradeParty(orgname, "teststr", "55232", "teststadt", "DE").addTaxID("4711").addVATID("DE0815").addBankDetails(new BankDetails("DE88200800000970375700", "COBADEFFXXX")))
.setRecipient(new TradeParty("Franz Müller", "teststr.12", "55232", "Entenhausen", "DE").addVATID("DE0815"))
.setNumber(number)
.addItem(new Item(new Product("Testprodukt", "", "C62", new BigDecimal(19)), price, qty));
// empty strings for document id's
i.setSellerOrderReferencedDocumentID("")
.setBuyerOrderReferencedDocumentID("")
.setContractReferencedDocument("")
.setDespatchAdviceReferencedDocumentID("")
.setInvoiceReferencedDocumentID("");
zf2p.generateXML(i);
String theXML = new String(zf2p.getXML());
assertFalse(theXML.contains("<ram:SellerOrderReferencedDocument"));
assertFalse(theXML.contains("<ram:BuyerOrderReferencedDocument"));
assertFalse(theXML.contains("<ram:ContractReferencedDocument"));
assertFalse(theXML.contains("<ram:DespatchAdviceReferencedDocument"));
assertFalse(theXML.contains("<ram:InvoiceReferencedDocument"));
// effective empty strings for document id's
i.setSellerOrderReferencedDocumentID(" ")
.setBuyerOrderReferencedDocumentID(" ")
.setContractReferencedDocument(" ")
.setDespatchAdviceReferencedDocumentID(" ")
.setInvoiceReferencedDocumentID(" ");
zf2p.generateXML(i);
theXML = new String(zf2p.getXML());
assertFalse(theXML.contains("<ram:SellerOrderReferencedDocument"));
assertFalse(theXML.contains("<ram:BuyerOrderReferencedDocument"));
assertFalse(theXML.contains("<ram:ContractReferencedDocument"));
assertFalse(theXML.contains("<ram:DespatchAdviceReferencedDocument"));
assertFalse(theXML.contains("<ram:InvoiceReferencedDocument"));
}
} }