From a2a7a85f05d5c3c05ea0c066e381716029715c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jochen=20Sta=CC=88rk?= Date: Sun, 19 Nov 2017 18:20:11 +0100 Subject: [PATCH] Closes #45 --- .../ZUGFeRD/ZUGFeRD1PullProvider.java | 2 ++ .../model/ZFNamespacePrefixMapper.java | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 src/main/java/org/mustangproject/ZUGFeRD/model/ZFNamespacePrefixMapper.java diff --git a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java index a4f5a0f9..44d7b494 100644 --- a/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java +++ b/src/main/java/org/mustangproject/ZUGFeRD/ZUGFeRD1PullProvider.java @@ -9,6 +9,7 @@ import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import org.mustangproject.ZUGFeRD.model.CrossIndustryDocumentType; +import org.mustangproject.ZUGFeRD.model.ZFNamespacePrefixMapper; public class ZUGFeRD1PullProvider implements IXMLProvider { @@ -33,6 +34,7 @@ public class ZUGFeRD1PullProvider implements IXMLProvider { marshaller = JAXBContext.newInstance("org.mustangproject.ZUGFeRD.model").createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); + marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new ZFNamespacePrefixMapper()); } catch (JAXBException e) { throw new ZUGFeRDExportException("Could not initialize JAXB", e); } diff --git a/src/main/java/org/mustangproject/ZUGFeRD/model/ZFNamespacePrefixMapper.java b/src/main/java/org/mustangproject/ZUGFeRD/model/ZFNamespacePrefixMapper.java new file mode 100644 index 00000000..37c93585 --- /dev/null +++ b/src/main/java/org/mustangproject/ZUGFeRD/model/ZFNamespacePrefixMapper.java @@ -0,0 +1,31 @@ +package org.mustangproject.ZUGFeRD.model; + +import java.util.HashMap; +import java.util.Map; + +import com.sun.xml.bind.marshaller.NamespacePrefixMapper; + +public class ZFNamespacePrefixMapper extends NamespacePrefixMapper { + + private Map namespaceMap = new HashMap<>(); + + /** + * Create mappings. + */ + public ZFNamespacePrefixMapper() { + + namespaceMap.put("urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:12", "ram"); + namespaceMap.put("urn:un:unece:uncefact:data:standard:UnqualifiedDataType:15", "udt"); + namespaceMap.put("urn:ferd:CrossIndustryDocument:invoice:1p0", "rsm"); + } + + /* (non-Javadoc) + * Returning null when not found based on spec. + * @see com.sun.xml.bind.marshaller.NamespacePrefixMapper#getPreferredPrefix(java.lang.String, java.lang.String, boolean) + */ + @Override + public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) { + return namespaceMap.getOrDefault(namespaceUri, suggestion); + } + +}