Commons Configuration
  1. Commons Configuration
  2. CONFIGURATION-287

XMLConfiguration.addNodes() problem using other configuration Nodes

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.4
    • Fix Version/s: 1.5
    • Component/s: None
    • Labels:
      None

      Description

      Trying to use the method XMLConfiguration.addNodes() to add a tree of configuration properties to a node in other tree fails.

      Example:

      public static void main(String ...args){
      try

      { configDestination = new XMLConfiguration("output.xml"); configSource = new XMLConfiguration("input.xml"); }

      catch(ConfigurationException cex)

      { System.out.println("File not found"); }

      Collection collection = new ArrayList();
      collection = configSource.getRoot().getChildren();
      configDestination.addNodes("newNodes", collection);
      try

      { configDestination.save(); }

      catch (ConfigurationException e)

      { System.out.println("Error saving"); }

      }

      The XML files:

      input.xml

      <rootNode>
      <newNodeChild>
      <newNodeChildChild>child value</newNodeChildChild>
      <newNodeChildChild>child value 2</newNodeChildChild>
      <newNodeChildChild>child value 3</newNodeChildChild>
      </newNodeChild>
      </rootNode>

      output.xml

      <testRootNode>
      <test>TEST</test>
      </testRootNode>

      output.xml after running the code:

      <testRootNode>
      <test>TEST</test>
      <newNodes/>
      </testRootNode>

      Expected output.xml:

      <testRootNode>
      <test>TEST</test>
      <newNodes>
      <newNodeChild>
      <newNodeChildChild>child value</newNodeChildChild>
      <newNodeChildChild>child value 2</newNodeChildChild>
      <newNodeChildChild>child value 3</newNodeChildChild>
      </newNodeChild>
      <newNodes/>
      </testRootNode>

      Apparently "the copied nodes still contain a reference to their old configuration (because you directly fetched them from the root node of the source configuration). Because of this reference they are not detected as new nodes when the destination configuration is saved, and hence not written to disk.

      I think addNodes() should reset this reference, so that the added nodes can be detected as new nodes. (But then you have to be aware that you break the source configuration because a node can only be contained in exactly one configuration.) "

        Activity

        Ruben Silva created issue -
        Oliver Heger made changes -
        Field Original Value New Value
        Assignee Oliver Heger [ oliver.heger@t-online.de ]
        Fix Version/s 1.5 [ 12312239 ]
        Oliver Heger made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Oliver Heger made changes -
        Status Resolved [ 5 ] Closed [ 6 ]

          People

          • Assignee:
            Oliver Heger
            Reporter:
            Ruben Silva
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development