Search code examples
javaxmljaxb

Add XML comments into marshaled file


I'm marshaling objects into an XML file. How can I add comments into that XML file?


Solution

  • I do not see a way to do it with JAXB alone. However, I think you can leverage DOM to get the desired effect:

    final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    final DocumentBuilder builder = factory.newDocumentBuilder();
    final Document doc = builder.getDOMImplementation().createDocument(null, null, null);
    
    final Binder<Node> binder = jaxbContext.createBinder();
    binder.marshal(jaxbObject, doc);
    final Comment comment = doc.createComment("This is a comment");
    doc.appendChild(comment);
    
    final DOMSource domSource = new DOMSource(doc);
    // use System.out for testing
    final StreamResult streamResult = new StreamResult(System.out);
    final TransformerFactory tf = TransformerFactory.newInstance();
    final Transformer serializer = tf.newTransformer();
    serializer.transform(domSource, streamResult);
    

    Where jaxbContext is the JAXBContext object you are working with and jaxbObject is the object to be marshalled. This sample just appends the comment to the end of the document. For a different location, you would have to traverse the DOM through the doc object or use XPath to find the exact element you want the comment added to and use appendChild on it.