Hi Vladimir,
Am 09.06.2011 11:27, schrieb Vladimir Stevanovic:
I'm using the following code:
//part1
XMLConfiguration config= new XMLConfiguration();
config.setDelimiterParsingDisabled(true);
config.setExpressionEngine(new XPathExpressionEngine());
config.setFile(f);
if (f.exists()) {
config.load(f);
}
//part2
config.addProperty(" a", "");
config.addProperty("a b", "");
config.addProperty("a/b c", "");
config.save();
//part3
System.out.println("a is a valid key " + config.containsKey("a"));
System.out.println("a/b is a valid key " + config.containsKey("a/b"));
System.out.println("a/b/c is a valid key " + config.containsKey("a/b/c"));
After executing it for the first time, the code behaves as I expected,
the simple nested xml structure is created and the output is:
a is a valid key true
a/b is a valid key true
a/b/c is a valid key true
Then, I removed the "part2" code, so the program should just read the
previously created configuration, bat the output was:
a is a valid key false
a/b is a valid key false
a/b/c is a valid key true
So, sometimes if key doesn't have any values it is seen as a key, and
sometimes not. Any explanation, solution,... ?
this is indeed inconsistent, but maybe I can at least explain what is
happening:
containsKey() is intended to return true if and only if the passed in
key has been assigned a value. This is not the same as if a
corresponding node exists in the hierarchical configuration; if there is
a node, but it does not have a value, containsKey() still returns false
(even if there a child nodes).
When you added new properties you have specified an empty string as
value, so there is a value different from null, and containsKey()
returns true. On loading the configuration from disk, this empty string
value is obviously ignored for the nodes which have child nodes.
Therefore containsKey() now returns false. For the leaf node in contrast
it is kept correctly.
So the actual problem is that XMLConfiguration cannot distinguish
between non-leaf nodes with an empty value or no value at all. This is
indeed ambiguous. Currently I have no idea how to solve this.
Oliver
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]