Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Minor Minor
    • Resolution: Invalid
    • Affects Version/s: 1.6
    • Fix Version/s: 1.7
    • Component/s: Interpolation
    • Labels:
      None

      Description

      When using OverrideCombiner it seems to ignore any list nodes and always return properties/values for list node from the overridden file. See the attached files for an example of what I mean. The following code always returns the values from config-custom even if list-nodes mentions that the sysprops node is a list-node.

      URL fileURL = TestConfig.class.getResource("config-conf.xml");

      try

      { DefaultConfigurationBuilder configBuilder = new DefaultConfigurationBuilder(fileURL); CombinedConfiguration config = configBuilder.getConfiguration(true); System.out.println(config.getString("sysprops/testkey")); System.out.println(config.getString("configprops/testkey1")); }

      catch (ConfigurationException e)

      { e.printStackTrace(); }
      1. config.xml
        0.2 kB
        Aniruddh Chitre
      2. config-custom.xml
        0.2 kB
        Aniruddh Chitre
      3. config-conf.xml
        0.8 kB
        Aniruddh Chitre

        Activity

        Hide
        Aniruddh Chitre added a comment -

        Attached sample XML files

        Show
        Aniruddh Chitre added a comment - Attached sample XML files
        Hide
        Oliver Heger added a comment -

        I am not sure whether I understand your problem. What would be the result you are expecting?

        Show
        Oliver Heger added a comment - I am not sure whether I understand your problem. What would be the result you are expecting?
        Hide
        Aniruddh Chitre added a comment -

        I am expecting that System.out.println(config.getString("sysprops/testkey")) should return 98759875789 from the second configuration file config.xml but it returns 3543453 from the first configuration file config-custom.xml. It might be correct behaviour for override but in my case I have specified the sysprops node as a list-node so I am expecting that even if the override file has sysprops the OverrideCombiner should return the value from the base configuration.

        Show
        Aniruddh Chitre added a comment - I am expecting that System.out.println(config.getString("sysprops/testkey")) should return 98759875789 from the second configuration file config.xml but it returns 3543453 from the first configuration file config-custom.xml. It might be correct behaviour for override but in my case I have specified the sysprops node as a list-node so I am expecting that even if the override file has sysprops the OverrideCombiner should return the value from the base configuration.
        Hide
        Oliver Heger added a comment -

        No, OverrideCombiner always takes data from the first configuration, no matter if list nodes are involved or not. Only properties that are not contained in the first configuration are obtained from the second one. This is the classic override semantics.

        Whether a property is a list node or not does not affect the selection performed by the combiner. This only influences the structure of the generated combined configuration.

        If you have specific requirements (obviously some properties must not be overridden), you probably have to implement your own combiner.

        Anyway, this is not a bug. OverrideCombiner works as expected.

        Show
        Oliver Heger added a comment - No, OverrideCombiner always takes data from the first configuration, no matter if list nodes are involved or not. Only properties that are not contained in the first configuration are obtained from the second one. This is the classic override semantics. Whether a property is a list node or not does not affect the selection performed by the combiner. This only influences the structure of the generated combined configuration. If you have specific requirements (obviously some properties must not be overridden), you probably have to implement your own combiner. Anyway, this is not a bug. OverrideCombiner works as expected.
        Hide
        Ralph Goers added a comment - - edited

        I would suggest that you checkout trunk and then build the web site. The documentation on the combiners was improved to illustrate the difference between the OverrideCombiner, UnionCombiner, and a new MergeCombiner. The MergeCombiner may work the way you desire as it attempts to merge nodes rather than override them.

        Also, after viewing that documentation, if you would like a combiner that works differently please open Jira issue that describes the way it should behave in detail. If you could provide a combiner that implements that, so much the better.

        Show
        Ralph Goers added a comment - - edited I would suggest that you checkout trunk and then build the web site. The documentation on the combiners was improved to illustrate the difference between the OverrideCombiner, UnionCombiner, and a new MergeCombiner. The MergeCombiner may work the way you desire as it attempts to merge nodes rather than override them. Also, after viewing that documentation, if you would like a combiner that works differently please open Jira issue that describes the way it should behave in detail. If you could provide a combiner that implements that, so much the better.
        Hide
        Oliver Heger added a comment -

        This is not a bug. OverrideCombiner works as expected.

        Show
        Oliver Heger added a comment - This is not a bug. OverrideCombiner works as expected.

          People

          • Assignee:
            Unassigned
            Reporter:
            Aniruddh Chitre
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development