Skip to content

Commit 5b132ca

Browse files
committed
[bugfix] Improve serialization of Reference Nodes from the in-memory DOM (Memtree)
1 parent 3bbee55 commit 5b132ca

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;
@@ -602,8 +603,15 @@ public void serialize(final NodeValue n, final Writer writer, final boolean prep
602603
applyXSLHandler(writer);
603604
prettyPrinter = null;
604605
} else {
605-
prettyPrinter = setPrettyPrinter(writer, "no".equals(outputProperties.getProperty(OutputKeys.OMIT_XML_DECLARATION, "yes")),
606-
n.getImplementationType() == NodeValue.PERSISTENT_NODE ? (NodeProxy) n : null, false);
606+
final NodeProxy root;
607+
if (n.getImplementationType() == NodeValue.PERSISTENT_NODE) {
608+
root = (NodeProxy) n;
609+
} else if (n instanceof AbstractReferenceNodeImpl<?, ?>) {
610+
root = ((AbstractReferenceNodeImpl<?, ?>) n).getNodeProxy();
611+
} else {
612+
root = null;
613+
}
614+
prettyPrinter = setPrettyPrinter(writer, "no".equals(outputProperties.getProperty(OutputKeys.OMIT_XML_DECLARATION, "yes")), root, false);
607615
}
608616

609617
try {
@@ -1232,6 +1240,8 @@ protected void serializeToReceiver(final NodeValue v, final boolean generateDocE
12321240
throws SAXException {
12331241
if (v.getImplementationType() == NodeValue.PERSISTENT_NODE) {
12341242
serializeToReceiver((NodeProxy) v, generateDocEvents, true);
1243+
} else if (v instanceof AbstractReferenceNodeImpl<?, ?>) {
1244+
serializeToReceiver(((AbstractReferenceNodeImpl<?, ?>) v).getNodeProxy(), generateDocEvents, true);
12351245
} else {
12361246
serializeToReceiver((org.exist.dom.memtree.NodeImpl) v, generateDocEvents);
12371247
}

0 commit comments

Comments
 (0)