@@ -38,16 +38,16 @@ public class XmlFactory extends JsonFactory
38
38
public final static String FORMAT_NAME_XML = "XML" ;
39
39
40
40
/**
41
- * Bitfield (set of flags) of all parser features that are enabled
41
+ * Bit field (set of flags) of all parser features that are enabled
42
42
* by default.
43
43
*/
44
- final static int DEFAULT_XML_PARSER_FEATURE_FLAGS = FromXmlParser .Feature .collectDefaults ();
44
+ protected final static int DEFAULT_XML_PARSER_FEATURE_FLAGS = FromXmlParser .Feature .collectDefaults ();
45
45
46
46
/**
47
- * Bitfield (set of flags) of all generator features that are enabled
47
+ * Bit field (set of flags) of all generator features that are enabled
48
48
* by default.
49
49
*/
50
- final static int DEFAULT_XML_GENERATOR_FEATURE_FLAGS = ToXmlGenerator .Feature .collectDefaults ();
50
+ protected final static int DEFAULT_XML_GENERATOR_FEATURE_FLAGS = ToXmlGenerator .Feature .collectDefaults ();
51
51
52
52
/*
53
53
/**********************************************************
@@ -513,7 +513,7 @@ public ToXmlGenerator createGenerator(OutputStream out, JsonEncoding enc) throws
513
513
// false -> we won't manage the stream unless explicitly directed to
514
514
final IOContext ctxt = _createContext (_createContentReference (out ), false );
515
515
ctxt .setEncoding (enc );
516
- return new ToXmlGenerator (ctxt ,
516
+ return createGenerator (ctxt ,
517
517
_generatorFeatures , _xmlGeneratorFeatures ,
518
518
_objectCodec , _createXmlWriter (ctxt , out ), _nameProcessor );
519
519
}
@@ -522,7 +522,7 @@ public ToXmlGenerator createGenerator(OutputStream out, JsonEncoding enc) throws
522
522
public ToXmlGenerator createGenerator (Writer out ) throws IOException
523
523
{
524
524
final IOContext ctxt = _createContext (_createContentReference (out ), false );
525
- return new ToXmlGenerator (ctxt ,
525
+ return createGenerator (ctxt ,
526
526
_generatorFeatures , _xmlGeneratorFeatures ,
527
527
_objectCodec , _createXmlWriter (ctxt , out ), _nameProcessor );
528
528
}
@@ -535,7 +535,7 @@ public ToXmlGenerator createGenerator(File f, JsonEncoding enc) throws IOExcepti
535
535
// true -> yes, we have to manage the stream since we created it
536
536
final IOContext ctxt = _createContext (_createContentReference (out ), true );
537
537
ctxt .setEncoding (enc );
538
- return new ToXmlGenerator (ctxt , _generatorFeatures , _xmlGeneratorFeatures ,
538
+ return createGenerator (ctxt , _generatorFeatures , _xmlGeneratorFeatures ,
539
539
_objectCodec , _createXmlWriter (ctxt , out ), _nameProcessor );
540
540
}
541
541
@@ -559,14 +559,25 @@ public FromXmlParser createParser(XMLStreamReader sr) throws IOException
559
559
}
560
560
561
561
// false -> not managed
562
- FromXmlParser xp = new FromXmlParser (_createContext (_createContentReference (sr ), false ),
562
+ FromXmlParser xp = this . createParser (_createContext (_createContentReference (sr ), false ),
563
563
_parserFeatures , _xmlParserFeatures , _objectCodec , sr , _nameProcessor );
564
564
if (_cfgNameForTextElement != null ) {
565
565
xp .setXMLTextElementName (_cfgNameForTextElement );
566
566
}
567
567
return xp ;
568
568
}
569
569
570
+ /**
571
+ * Creates and returns a new instance of {@link FromXmlParser} configured with the provided parameters.
572
+ * If you need to extend or customize the FromXmlParser, you can simply override this method.
573
+ *
574
+ * @since 2.20
575
+ */
576
+ protected FromXmlParser createParser (IOContext ctxt , int genericParserFeatures , int xmlFeatures , ObjectCodec codec ,
577
+ XMLStreamReader xmlReader , XmlNameProcessor tagProcessor ) throws IOException {
578
+ return new FromXmlParser (ctxt , genericParserFeatures , xmlFeatures , codec , xmlReader , tagProcessor );
579
+ }
580
+
570
581
/**
571
582
* Factory method that wraps given {@link XMLStreamWriter}, usually to allow
572
583
* incremental serialization to compose large output by serializing a sequence
@@ -578,10 +589,21 @@ public ToXmlGenerator createGenerator(XMLStreamWriter sw) throws IOException
578
589
{
579
590
sw = _initializeXmlWriter (sw );
580
591
IOContext ctxt = _createContext (_createContentReference (sw ), false );
581
- return new ToXmlGenerator (ctxt , _generatorFeatures , _xmlGeneratorFeatures ,
592
+ return createGenerator (ctxt , _generatorFeatures , _xmlGeneratorFeatures ,
582
593
_objectCodec , sw , _nameProcessor );
583
594
}
584
595
596
+ /**
597
+ * Factory method called by more other {@code creatoGenerator} methods.
598
+ * Overriding this method makes it easy to extend and customize the ToXmlGenerator.
599
+ *
600
+ * @since 2.20
601
+ */
602
+ public ToXmlGenerator createGenerator (IOContext ctxt , int stdFeatures , int xmlFeatures , ObjectCodec codec ,
603
+ XMLStreamWriter sw , XmlNameProcessor nameProcessor ) {
604
+ return new ToXmlGenerator (ctxt , stdFeatures , xmlFeatures , codec , sw , nameProcessor );
605
+ }
606
+
585
607
/*
586
608
/**********************************************************
587
609
/* Internal factory method overrides
@@ -598,7 +620,7 @@ protected FromXmlParser _createParser(InputStream in, IOContext ctxt) throws IOE
598
620
return StaxUtil .throwAsParseException (e , null );
599
621
}
600
622
sr = _initializeXmlReader (sr );
601
- FromXmlParser xp = new FromXmlParser (ctxt , _parserFeatures , _xmlParserFeatures ,
623
+ FromXmlParser xp = this . createParser (ctxt , _parserFeatures , _xmlParserFeatures ,
602
624
_objectCodec , sr , _nameProcessor );
603
625
if (_cfgNameForTextElement != null ) {
604
626
xp .setXMLTextElementName (_cfgNameForTextElement );
@@ -616,7 +638,7 @@ protected FromXmlParser _createParser(Reader r, IOContext ctxt) throws IOExcepti
616
638
return StaxUtil .throwAsParseException (e , null );
617
639
}
618
640
sr = _initializeXmlReader (sr );
619
- FromXmlParser xp = new FromXmlParser (ctxt , _parserFeatures , _xmlParserFeatures ,
641
+ FromXmlParser xp = this . createParser (ctxt , _parserFeatures , _xmlParserFeatures ,
620
642
_objectCodec , sr , _nameProcessor );
621
643
if (_cfgNameForTextElement != null ) {
622
644
xp .setXMLTextElementName (_cfgNameForTextElement );
@@ -643,7 +665,7 @@ protected FromXmlParser _createParser(char[] data, int offset, int len, IOContex
643
665
return StaxUtil .throwAsParseException (e , null );
644
666
}
645
667
sr = _initializeXmlReader (sr );
646
- FromXmlParser xp = new FromXmlParser (ctxt , _parserFeatures , _xmlParserFeatures ,
668
+ FromXmlParser xp = this . createParser (ctxt , _parserFeatures , _xmlParserFeatures ,
647
669
_objectCodec , sr , _nameProcessor );
648
670
if (_cfgNameForTextElement != null ) {
649
671
xp .setXMLTextElementName (_cfgNameForTextElement );
@@ -677,7 +699,7 @@ protected FromXmlParser _createParser(byte[] data, int offset, int len, IOContex
677
699
return StaxUtil .throwAsParseException (e , null );
678
700
}
679
701
sr = _initializeXmlReader (sr );
680
- FromXmlParser xp = new FromXmlParser (ctxt , _parserFeatures , _xmlParserFeatures ,
702
+ FromXmlParser xp = this . createParser (ctxt , _parserFeatures , _xmlParserFeatures ,
681
703
_objectCodec , sr , _nameProcessor );
682
704
if (_cfgNameForTextElement != null ) {
683
705
xp .setXMLTextElementName (_cfgNameForTextElement );
0 commit comments