I am marshalling (serializing) JAXB beans to output stream. How can I add DOCTYPE declaration and xml processing instructions to ouput?
I am doing currently marshal
The JAXB RI has a proprietary Marshaller
property com.sun.xml.bind.xmlHeaders
(see XML Preamble Control:
This property allows you to specify an XML preamble (
<?xml ...>
declaration) and any additional PIs, comments,DOCTYPE
declaration that follows it. This property takes effect only when you are marshalling toOutputStream
,Writer
, orStreamResult
. Note that this property interacts with theMarshaller.JAXB_FRAGMENT
property. If that property is untouched or set to false, then JAXB would always write its XML preamble, so this property can be only used to write PIs, comments,DOCTYPE
, etc. On the other hand, if it is set to true, then JAXB will not write its own XML preamble, so this property may contain custom XML preamble.
This should do what you need. If you're using Java5 and the JAXB RI, then this should just work. If you're using Java6 with its included JAXB implementation, the com.sun.xml.bind.xmlHeaders
name might be different, so try com.sun.xml.internal.bind.xmlHeaders
instead.