Class DefaultXmlService

java.lang.Object
org.apache.maven.api.xml.XmlService
org.apache.maven.internal.xml.DefaultXmlService

public class DefaultXmlService extends XmlService
  • Constructor Details

    • DefaultXmlService

      public DefaultXmlService()
  • Method Details

    • doRead

      @Nonnull public XmlNode doRead(InputStream input, @Nullable XmlService.InputLocationBuilder locationBuilder) throws XMLStreamException
      Specified by:
      doRead in class XmlService
      Throws:
      XMLStreamException
    • doRead

      @Nonnull public XmlNode doRead(Reader reader, @Nullable XmlService.InputLocationBuilder locationBuilder) throws XMLStreamException
      Specified by:
      doRead in class XmlService
      Throws:
      XMLStreamException
    • doRead

      @Nonnull public XmlNode doRead(XMLStreamReader parser, @Nullable XmlService.InputLocationBuilder locationBuilder) throws XMLStreamException
      Specified by:
      doRead in class XmlService
      Throws:
      XMLStreamException
    • doWrite

      public void doWrite(XmlNode node, Writer writer) throws IOException
      Specified by:
      doWrite in class XmlService
      Throws:
      IOException
    • doMerge

      public XmlNode doMerge(XmlNode dominant, XmlNode recessive, Boolean childMergeOverride)
      Merges one DOM into another, given a specific algorithm and possible override points for that algorithm.

      The algorithm is as follows:

      1. if the recessive DOM is null, there is nothing to do... return.
      2. Determine whether the dominant node will suppress the recessive one (flag=mergeSelf).
        1. retrieve the 'combine.self' attribute on the dominant node, and try to match against 'override'... if it matches 'override', then set mergeSelf == false...the dominant node suppresses the recessive one completely.
        2. otherwise, use the default value for mergeSelf, which is true...this is the same as specifying 'combine.self' == 'merge' as an attribute of the dominant root node.
      3. If mergeSelf == true
        1. Determine whether children from the recessive DOM will be merged or appended to the dominant DOM as siblings (flag=mergeChildren).
          1. if childMergeOverride is set (non-null), use that value (true/false)
          2. retrieve the 'combine.children' attribute on the dominant node, and try to match against 'append'...
          3. if it matches 'append', then set mergeChildren == false...the recessive children will be appended as siblings of the dominant children.
          4. otherwise, use the default value for mergeChildren, which is true...this is the same as specifying 'combine.children' == 'merge' as an attribute on the dominant root node.
        2. Iterate through the recessive children, and:
          1. if mergeChildren == true and there is a corresponding dominant child (matched by element name), merge the two.
          2. otherwise, add the recessive child as a new child on the dominant root node.
      Specified by:
      doMerge in class XmlService