1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.common.lib.jackson;
20
21 import com.ctc.wstx.stax.WstxOutputFactory;
22 import com.fasterxml.jackson.annotation.JsonSetter;
23 import com.fasterxml.jackson.annotation.Nulls;
24 import com.fasterxml.jackson.databind.SerializationFeature;
25 import com.fasterxml.jackson.dataformat.xml.XmlFactory;
26 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
27 import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser;
28 import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.Set;
32 import javax.xml.stream.XMLInputFactory;
33 import javax.xml.stream.XMLOutputFactory;
34
35 public class SyncopeXmlMapper extends XmlMapper {
36
37 private static final long serialVersionUID = 1022020055828974308L;
38
39 public SyncopeXmlMapper() {
40 super(new XmlFactory() {
41
42 private static final long serialVersionUID = 1022020055828974306L;
43
44 @Override
45 protected void _initFactories(final XMLInputFactory xmlIn, final XMLOutputFactory xmlOut) {
46 super._initFactories(xmlIn, xmlOut);
47 xmlOut.setProperty(WstxOutputFactory.P_AUTOMATIC_EMPTY_ELEMENTS, Boolean.FALSE);
48 }
49 });
50
51 findAndRegisterModules();
52
53 configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
54 configure(SerializationFeature.WRITE_DURATIONS_AS_TIMESTAMPS, false);
55
56 configOverride(List.class).setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
57 configOverride(Set.class).setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
58 configOverride(Map.class).setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
59
60 enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION);
61 enable(FromXmlParser.Feature.EMPTY_ELEMENT_AS_NULL);
62 }
63 }