+ /**
+ * Lazy Serialized Node with pre-cached serialized leaf holding routing information.
+ *
+ */
+ private static final class WithContextRef extends LazySerializedContainerNode {
+
+ private final LeafNode<?> contextRef;
+
+ protected WithContextRef(final QName identifier, final DataObject binding, final LeafNode<?> contextRef,
+ final BindingNormalizedNodeSerializer registry) {
+ super(identifier, binding, registry);
+ this.contextRef = contextRef;
+ }
+
+ @Override
+ public Optional<DataContainerChild<? extends PathArgument, ?>> getChild(final PathArgument child) {
+ /*
+ * Use precached value of routing field and do not run full serialization if we are
+ * accessing it.
+ */
+ if (contextRef.getIdentifier().equals(child)) {
+ return Optional.<DataContainerChild<? extends PathArgument, ?>>of(contextRef);
+ }
+ return super.getChild(child);
+ }
+ }
+