From 1d7e5239fd561285399ba056850c6d7511ceb50d Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Sat, 13 Dec 2008 11:58:53 +0000 Subject: [PATCH] SWS-434 --- .../ws/soap/axiom/AxiomHandler.java | 9 ++++++- .../ws/soap/axiom/AxiomHandlerTest.java | 26 ++++++++++++++----- 2 files changed, 28 insertions(+), 7 deletions(-) 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