diff --git a/core/src/main/java/org/springframework/ws/soap/axiom/AxiomHandler.java b/core/src/main/java/org/springframework/ws/soap/axiom/AxiomHandler.java
index 784f8f8d..2358a842 100644
--- a/core/src/main/java/org/springframework/ws/soap/axiom/AxiomHandler.java
+++ b/core/src/main/java/org/springframework/ws/soap/axiom/AxiomHandler.java
@@ -147,13 +147,20 @@ class AxiomHandler implements ContentHandler, LexicalHandler {
}
public void startEntity(String name) throws SAXException {
- charactersType = XMLStreamConstants.ENTITY_REFERENCE;
+ if (!isPredefinedEntityReference(name)) {
+ charactersType = XMLStreamConstants.ENTITY_REFERENCE;
+ }
}
public void endEntity(String name) throws SAXException {
charactersType = XMLStreamConstants.CHARACTERS;
}
+ private boolean isPredefinedEntityReference(String name) {
+ return "lt".equals(name) || "gt".equals(name) || "amp".equals(name) || "quot".equals(name) ||
+ "apos".equals(name);
+ }
+
/*
* Unsupported
*/
diff --git a/core/src/test/java/org/springframework/ws/soap/axiom/AxiomHandlerTest.java b/core/src/test/java/org/springframework/ws/soap/axiom/AxiomHandlerTest.java
index bad5a63d..97ce8bff 100644
--- a/core/src/test/java/org/springframework/ws/soap/axiom/AxiomHandlerTest.java
+++ b/core/src/test/java/org/springframework/ws/soap/axiom/AxiomHandlerTest.java
@@ -31,17 +31,21 @@ import org.xml.sax.helpers.XMLReaderFactory;
public class AxiomHandlerTest extends XMLTestCase {
- private static final String XML_1 = "" + "" +
- "" +
- "content" +
- "";
+ private static final String XML_1 =
+ "" + "" + "" +
+ "content" +
+ "";
- private static final String XML_2_EXPECTED = "" + "" +
- "" + "";
+ private static final String XML_2_EXPECTED =
+ "" + "" + "" +
+ "";
private static final String XML_2_SNIPPET =
"" + "";
+ private static final String XML_3_ENTITY =
+ "<>&"'";
+
private AxiomHandler handler;
private OMDocument result;
@@ -87,4 +91,14 @@ public class AxiomHandlerTest extends XMLTestCase {
result.serialize(bos);
assertXMLEqual("Invalid result", XML_2_EXPECTED, bos.toString("UTF-8"));
}
+
+ public void testContentHandlerPredefinedEntityReference() throws Exception {
+ handler = new AxiomHandler(result, factory);
+ xmlReader.setContentHandler(handler);
+ xmlReader.setProperty("http://xml.org/sax/properties/lexical-handler", handler);
+ xmlReader.parse(new InputSource(new StringReader(XML_3_ENTITY)));
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ result.serialize(bos);
+ assertXMLEqual("Invalid result", XML_3_ENTITY, bos.toString("UTF-8"));
+ }
}
\ No newline at end of file