From 384e3b576fa4c4f349c5fcde7ffaea16e53c1c97 Mon Sep 17 00:00:00 2001 From: Christof Rabensteiner Date: Wed, 8 May 2019 11:17:34 +0200 Subject: Fix Namespace Prefixes in Marshaled Messages (msg: instead of ns#:) - Implement own NamespacePrefixMapper that maps prefixes depending on whether a msg or a mzs object is being marshaled. - Namespaces are not hardcoded but extracted from jaxb's generated sources (somewhat indirect, can be considered a hack, but there's no public API to extract namespaces) --- .../at/gv/egiz/moazs/config/MarshallerConfig.java | 52 +++++++++++++++++++--- 1 file changed, 47 insertions(+), 5 deletions(-) (limited to 'src/main/java/at/gv/egiz/moazs/config') diff --git a/src/main/java/at/gv/egiz/moazs/config/MarshallerConfig.java b/src/main/java/at/gv/egiz/moazs/config/MarshallerConfig.java index e6e3cc1..6fdd128 100644 --- a/src/main/java/at/gv/egiz/moazs/config/MarshallerConfig.java +++ b/src/main/java/at/gv/egiz/moazs/config/MarshallerConfig.java @@ -1,5 +1,9 @@ package at.gv.egiz.moazs.config; +import at.gv.egiz.moazs.Marshaller; +import at.gv.egiz.moazs.MoaZSPrefixMapper; +import com.sun.xml.bind.marshaller.NamespacePrefixMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.oxm.jaxb.Jaxb2Marshaller; @@ -10,19 +14,57 @@ import java.util.HashMap; public class MarshallerConfig { @Bean - public Jaxb2Marshaller jaxb2Marshaller() { + public NamespacePrefixMapper msgMapper() { + return new MoaZSPrefixMapper(false); + } + + @Bean + public NamespacePrefixMapper mzsMapper() { + return new MoaZSPrefixMapper(true); + } + + @Bean + public Jaxb2Marshaller mzsJaxbMarshaller() { + Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); + + marshaller.setClassesToBeBound( + at.gv.zustellung.app2mzs.xsd.ObjectFactory.class, + at.gv.zustellung.app2mzs.xsd.persondata.ObjectFactory.class, + at.gv.zustellung.msg.xsd.ObjectFactory.class); + + marshaller.setMarshallerProperties(new HashMap() {{ + put(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, true); + put("com.sun.xml.bind.namespacePrefixMapper", mzsMapper()); + }}); + + return marshaller; + } + + @Bean + public Jaxb2Marshaller msgJaxbMarshaller() { Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); + marshaller.setClassesToBeBound( - at.gv.zustellung.msg.xsd.ObjectFactory.class, - at.gv.zustellung.msg.xsd.persondata.ObjectFactory.class, - at.gv.zustellung.app2mzs.xsd.ObjectFactory.class, - at.gv.zustellung.app2mzs.xsd.persondata.ObjectFactory.class); + at.gv.zustellung.msg.xsd.ObjectFactory.class, + at.gv.zustellung.msg.xsd.persondata.ObjectFactory.class); marshaller.setMarshallerProperties(new HashMap() {{ put(javax.xml.bind.Marshaller.JAXB_FORMATTED_OUTPUT, true); + put("com.sun.xml.bind.namespacePrefixMapper", msgMapper()); }}); return marshaller; } + @Bean + public Marshaller mzsMarshaller() { + return new Marshaller(mzsJaxbMarshaller()); + } + + @Bean + public Marshaller msgMarshaller() { + return new Marshaller(msgJaxbMarshaller()); + } + + } -- cgit v1.2.3