@@ -66,6 +66,8 @@ public class XmlFactory extends JsonFactory
6666
6767 protected String _cfgNameForTextElement ;
6868
69+ protected String _cfgValueForEmptyElement ;
70+
6971 protected XmlNameProcessor _nameProcessor ;
7072
7173 /*
@@ -107,18 +109,26 @@ public XmlFactory(ObjectCodec oc, XMLInputFactory xmlIn, XMLOutputFactory xmlOut
107109 public XmlFactory (ObjectCodec oc , int xpFeatures , int xgFeatures ,
108110 XMLInputFactory xmlIn , XMLOutputFactory xmlOut ,
109111 String nameForTextElem ) {
110- this (oc , xpFeatures , xgFeatures , xmlIn , xmlOut , nameForTextElem , XmlNameProcessors .newPassthroughProcessor ());
112+ this (oc , xpFeatures , xgFeatures , xmlIn , xmlOut , nameForTextElem , FromXmlParser .DEFAULT_EMPTY_ELEMENT_VALUE , XmlNameProcessors .newPassthroughProcessor ());
113+ }
114+
115+ public XmlFactory (ObjectCodec oc , int xpFeatures , int xgFeatures ,
116+ XMLInputFactory xmlIn , XMLOutputFactory xmlOut ,
117+ String nameForTextElem , String valueForEmptyElement ) {
118+ this (oc , xpFeatures , xgFeatures , xmlIn , xmlOut , nameForTextElem , valueForEmptyElement ,
119+ XmlNameProcessors .newPassthroughProcessor ());
111120 }
112121
113122 protected XmlFactory (ObjectCodec oc , int xpFeatures , int xgFeatures ,
114123 XMLInputFactory xmlIn , XMLOutputFactory xmlOut ,
115- String nameForTextElem , XmlNameProcessor nameProcessor )
124+ String nameForTextElem , String valueForEmptyElement , XmlNameProcessor nameProcessor )
116125 {
117126 super (oc );
118127 _nameProcessor = nameProcessor ;
119128 _xmlParserFeatures = xpFeatures ;
120129 _xmlGeneratorFeatures = xgFeatures ;
121130 _cfgNameForTextElement = nameForTextElem ;
131+ _cfgValueForEmptyElement = valueForEmptyElement ;
122132 if (xmlIn == null ) {
123133 xmlIn = StaxUtil .defaultInputFactory (getClass ().getClassLoader ());
124134 // as per [dataformat-xml#190], disable external entity expansion by default
@@ -145,6 +155,7 @@ protected XmlFactory(XmlFactory src, ObjectCodec oc)
145155 _xmlParserFeatures = src ._xmlParserFeatures ;
146156 _xmlGeneratorFeatures = src ._xmlGeneratorFeatures ;
147157 _cfgNameForTextElement = src ._cfgNameForTextElement ;
158+ _cfgValueForEmptyElement = src ._cfgValueForEmptyElement ;
148159 _xmlInputFactory = src ._xmlInputFactory ;
149160 _xmlOutputFactory = src ._xmlOutputFactory ;
150161 _nameProcessor = src ._nameProcessor ;
@@ -161,6 +172,7 @@ protected XmlFactory(XmlFactoryBuilder b)
161172 _xmlParserFeatures = b .formatParserFeaturesMask ();
162173 _xmlGeneratorFeatures = b .formatGeneratorFeaturesMask ();
163174 _cfgNameForTextElement = b .nameForTextElement ();
175+ _cfgValueForEmptyElement = b .valueForEmptyElement ();
164176 _xmlInputFactory = b .xmlInputFactory ();
165177 _xmlOutputFactory = b .xmlOutputFactory ();
166178 _nameProcessor = b .xmlNameProcessor ();
@@ -237,7 +249,7 @@ protected Object readResolve() {
237249 throw new IllegalArgumentException (e );
238250 }
239251 return new XmlFactory (_objectCodec , _xmlParserFeatures , _xmlGeneratorFeatures ,
240- inf , outf , _cfgNameForTextElement );
252+ inf , outf , _cfgNameForTextElement , _cfgValueForEmptyElement );
241253 }
242254
243255 /**
@@ -281,6 +293,20 @@ public void setXMLTextElementName(String name) {
281293 public String getXMLTextElementName () {
282294 return _cfgNameForTextElement ;
283295 }
296+
297+ /**
298+ * @since 2.17
299+ */
300+ public void setEmptyElementValue (String value ) {
301+ _cfgValueForEmptyElement = value ;
302+ }
303+
304+ /**
305+ * @since 2.17
306+ */
307+ public String getEmptyElementValue () {
308+ return _cfgValueForEmptyElement ;
309+ }
284310
285311 /*
286312 /**********************************************************
@@ -560,7 +586,7 @@ public FromXmlParser createParser(XMLStreamReader sr) throws IOException
560586
561587 // false -> not managed
562588 FromXmlParser xp = new FromXmlParser (_createContext (_createContentReference (sr ), false ),
563- _parserFeatures , _xmlParserFeatures , _objectCodec , sr , _nameProcessor );
589+ _parserFeatures , _xmlParserFeatures , _objectCodec , sr , _nameProcessor , _cfgValueForEmptyElement );
564590 if (_cfgNameForTextElement != null ) {
565591 xp .setXMLTextElementName (_cfgNameForTextElement );
566592 }
@@ -599,7 +625,7 @@ protected FromXmlParser _createParser(InputStream in, IOContext ctxt) throws IOE
599625 }
600626 sr = _initializeXmlReader (sr );
601627 FromXmlParser xp = new FromXmlParser (ctxt , _parserFeatures , _xmlParserFeatures ,
602- _objectCodec , sr , _nameProcessor );
628+ _objectCodec , sr , _nameProcessor , _cfgValueForEmptyElement );
603629 if (_cfgNameForTextElement != null ) {
604630 xp .setXMLTextElementName (_cfgNameForTextElement );
605631 }
@@ -617,7 +643,7 @@ protected FromXmlParser _createParser(Reader r, IOContext ctxt) throws IOExcepti
617643 }
618644 sr = _initializeXmlReader (sr );
619645 FromXmlParser xp = new FromXmlParser (ctxt , _parserFeatures , _xmlParserFeatures ,
620- _objectCodec , sr , _nameProcessor );
646+ _objectCodec , sr , _nameProcessor , _cfgValueForEmptyElement );
621647 if (_cfgNameForTextElement != null ) {
622648 xp .setXMLTextElementName (_cfgNameForTextElement );
623649 }
@@ -644,7 +670,7 @@ protected FromXmlParser _createParser(char[] data, int offset, int len, IOContex
644670 }
645671 sr = _initializeXmlReader (sr );
646672 FromXmlParser xp = new FromXmlParser (ctxt , _parserFeatures , _xmlParserFeatures ,
647- _objectCodec , sr , _nameProcessor );
673+ _objectCodec , sr , _nameProcessor , _cfgValueForEmptyElement );
648674 if (_cfgNameForTextElement != null ) {
649675 xp .setXMLTextElementName (_cfgNameForTextElement );
650676 }
@@ -678,7 +704,7 @@ protected FromXmlParser _createParser(byte[] data, int offset, int len, IOContex
678704 }
679705 sr = _initializeXmlReader (sr );
680706 FromXmlParser xp = new FromXmlParser (ctxt , _parserFeatures , _xmlParserFeatures ,
681- _objectCodec , sr , _nameProcessor );
707+ _objectCodec , sr , _nameProcessor , _cfgValueForEmptyElement );
682708 if (_cfgNameForTextElement != null ) {
683709 xp .setXMLTextElementName (_cfgNameForTextElement );
684710 }
0 commit comments