Skip to content

Commit f2098b8

Browse files
committed
[bugfix] Improve serialization of Reference Nodes from the in-memory DOM (Memtree)
1 parent 50a39d7 commit f2098b8

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

exist-core/src/main/java/org/exist/storage/serializers/Serializer.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import org.apache.logging.log4j.LogManager;
7373
import org.apache.logging.log4j.Logger;
7474
import org.exist.Namespaces;
75+
import org.exist.dom.memtree.reference.AbstractReferenceNodeImpl;
7576
import org.exist.dom.persistent.DocumentImpl;
7677
import org.exist.dom.persistent.NodeProxy;
7778
import org.exist.dom.QName;
@@ -598,8 +599,15 @@ public void serialize(final NodeValue n, final Writer writer, final boolean prep
598599
applyXSLHandler(writer);
599600
prettyPrinter = null;
600601
} else {
601-
prettyPrinter = setPrettyPrinter(writer, "no".equals(outputProperties.getProperty(OutputKeys.OMIT_XML_DECLARATION, "yes")),
602-
n.getImplementationType() == NodeValue.PERSISTENT_NODE ? (NodeProxy) n : null, false);
602+
final NodeProxy root;
603+
if (n.getImplementationType() == NodeValue.PERSISTENT_NODE) {
604+
root = (NodeProxy) n;
605+
} else if (n instanceof AbstractReferenceNodeImpl<?, ?>) {
606+
root = ((AbstractReferenceNodeImpl<?, ?>) n).getNodeProxy();
607+
} else {
608+
root = null;
609+
}
610+
prettyPrinter = setPrettyPrinter(writer, "no".equals(outputProperties.getProperty(OutputKeys.OMIT_XML_DECLARATION, "yes")), root, false);
603611
}
604612

605613
try {
@@ -1228,6 +1236,8 @@ protected void serializeToReceiver(final NodeValue v, final boolean generateDocE
12281236
throws SAXException {
12291237
if (v.getImplementationType() == NodeValue.PERSISTENT_NODE) {
12301238
serializeToReceiver((NodeProxy) v, generateDocEvents, true);
1239+
} else if (v instanceof AbstractReferenceNodeImpl<?, ?>) {
1240+
serializeToReceiver(((AbstractReferenceNodeImpl<?, ?>) v).getNodeProxy(), generateDocEvents, true);
12311241
} else {
12321242
serializeToReceiver((org.exist.dom.memtree.NodeImpl) v, generateDocEvents);
12331243
}

0 commit comments

Comments
 (0)