This is an automated email from the ASF dual-hosted git repository.

coheigea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ws-neethi.git

commit bcff4ecaf970112a5c55fcf2200665e0541fea9f
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Tue Apr 21 10:12:08 2026 +0100

    Fixing entity reference parsing
---
 .../builders/converters/StaxToDOMConverter.java    |  2 +-
 .../converters/StaxToDOMConverterTest.java         | 68 ++++++++++++++++++++++
 2 files changed, 69 insertions(+), 1 deletion(-)

diff --git 
a/src/main/java/org/apache/neethi/builders/converters/StaxToDOMConverter.java 
b/src/main/java/org/apache/neethi/builders/converters/StaxToDOMConverter.java
index 3757d53..952fbda 100644
--- 
a/src/main/java/org/apache/neethi/builders/converters/StaxToDOMConverter.java
+++ 
b/src/main/java/org/apache/neethi/builders/converters/StaxToDOMConverter.java
@@ -125,7 +125,7 @@ public class StaxToDOMConverter extends 
AbstractStaxConverter
                 
parent.appendChild(doc.createProcessingInstruction(reader.getPITarget(), 
reader.getPIData()));
                 break;
             case XMLStreamConstants.ENTITY_REFERENCE:
-                
parent.appendChild(doc.createProcessingInstruction(reader.getPITarget(), 
reader.getPIData()));
+                
parent.appendChild(doc.createEntityReference(reader.getLocalName()));
                 break;
             default:
                 break;
diff --git 
a/src/test/java/org/apache/neethi/builders/converters/StaxToDOMConverterTest.java
 
b/src/test/java/org/apache/neethi/builders/converters/StaxToDOMConverterTest.java
new file mode 100644
index 0000000..25bcfd8
--- /dev/null
+++ 
b/src/test/java/org/apache/neethi/builders/converters/StaxToDOMConverterTest.java
@@ -0,0 +1,68 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.neethi.builders.converters;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.StringReader;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+
+import org.junit.Test;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+public class StaxToDOMConverterTest {
+
+    /**
+     * Converts an XML document containing an entity reference with
+     * IS_REPLACING_ENTITY_REFERENCES=false, which causes the StAX parser to 
emit
+     * an ENTITY_REFERENCE event instead of expanding the entity inline.
+     */
+    @Test
+    public void testEntityReferenceProducesEntityReferenceNode() throws 
Exception {
+        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+            + "<!DOCTYPE root [<!ENTITY greet \"Hello\">]>"
+            + "<root>&greet;</root>";
+
+        XMLInputFactory xif = XMLInputFactory.newInstance();
+        // Prevent the parser from expanding &greet; into text, so it emits
+        // an ENTITY_REFERENCE event that exercises the buggy case.
+        xif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, 
Boolean.FALSE);
+        xif.setProperty(XMLInputFactory.SUPPORT_DTD, Boolean.TRUE);
+
+        XMLStreamReader reader = xif.createXMLStreamReader(new 
StringReader(xml));
+
+        Element element = new StaxToDOMConverter().convert(reader);
+
+        assertNotNull(element);
+        Node child = element.getFirstChild();
+        assertNotNull("Expected an entity reference child node under <root>", 
child);
+        assertEquals(
+            "Expected ENTITY_REFERENCE_NODE (" + Node.ENTITY_REFERENCE_NODE + 
") "
+                + "but got node type " + child.getNodeType()
+                + " — ENTITY_REFERENCE case calls createProcessingInstruction 
instead of createEntityReference",
+            Node.ENTITY_REFERENCE_NODE,
+            child.getNodeType());
+        assertEquals("greet", child.getNodeName());
+    }
+}

Reply via email to