- checkKeys();
- return new ImmutableMapEntryNode(getNodeIdentifier(), buildValue(), getAttributes());
- }
-
- private void checkKeys() {
- for (final QName keyQName : getNodeIdentifier().getKeyValues().keySet()) {
- DataContainerChild<?, ?> childNode = getChild(childrenQNamesToPaths.get(keyQName));
- DataValidationException.checkListKey(childNode, getNodeIdentifier().getKeyValues(), keyQName, getNodeIdentifier());
+ for (final Entry<QName, Object> key : getNodeIdentifier().getKeyValues().entrySet()) {
+ final DataContainerChild<?, ?> childNode = getChild(childrenQNamesToPaths.get(key.getKey()));
+
+ // We have enough information to fill-in missing leaf nodes, so let's do that
+ if (childNode == null) {
+ LeafNode<Object> leaf = ImmutableNodes.leafNode(key.getKey(), key.getValue());
+ LOG.debug("Adding leaf {} implied by key {}", leaf, key);
+ withChild(leaf);
+ } else {
+ DataValidationException.checkListKey(getNodeIdentifier(), key.getKey(), key.getValue(),
+ childNode.getValue());
+ }