From fca72f6b65c27d44bccaa116156a7e0a816a1d15 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Wed, 16 Jul 2014 13:16:20 +0200 Subject: [PATCH] StaxStreamXMLReader ignores significant whitespace The StaxStreamXMLReader no longer handles all whitespace as ignorable whitespace. Issue: SPR-12000 (cherry picked from commit d6950d8) --- .../util/xml/StaxStreamXMLReader.java | 7 +---- .../xml/AbstractStaxXMLReaderTestCase.java | 28 ++++++++++++++++++- .../util/xml/testContentHandler.xml | 2 +- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/util/xml/StaxStreamXMLReader.java b/spring-core/src/main/java/org/springframework/util/xml/StaxStreamXMLReader.java index 81e3ca60151a..ce1861576ce4 100644 --- a/spring-core/src/main/java/org/springframework/util/xml/StaxStreamXMLReader.java +++ b/spring-core/src/main/java/org/springframework/util/xml/StaxStreamXMLReader.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -217,11 +217,6 @@ private void handleEndElement() throws SAXException { } private void handleCharacters() throws SAXException { - if (getContentHandler() != null && this.reader.isWhiteSpace()) { - getContentHandler().ignorableWhitespace(this.reader.getTextCharacters(), - this.reader.getTextStart(), this.reader.getTextLength()); - return; - } if (XMLStreamConstants.CDATA == this.reader.getEventType() && getLexicalHandler() != null) { getLexicalHandler().startCDATA(); } diff --git a/spring-core/src/test/java/org/springframework/util/xml/AbstractStaxXMLReaderTestCase.java b/spring-core/src/test/java/org/springframework/util/xml/AbstractStaxXMLReaderTestCase.java index 2072b2e3626e..15ff0d4df5fa 100644 --- a/spring-core/src/test/java/org/springframework/util/xml/AbstractStaxXMLReaderTestCase.java +++ b/spring-core/src/test/java/org/springframework/util/xml/AbstractStaxXMLReaderTestCase.java @@ -16,15 +16,22 @@ package org.springframework.util.xml; +import java.io.ByteArrayInputStream; import java.io.InputStream; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMResult; +import javax.xml.transform.sax.SAXSource; +import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; import static org.mockito.BDDMockito.*; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; +import org.w3c.dom.Node; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; @@ -103,6 +110,25 @@ public void contentHandlerNoNamespacesPrefixes() throws Exception { verifyIdenticalInvocations(standardContentHandler, contentHandler); } + @Test + public void whitespace() throws Exception { + String xml = " Some text "; + + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + + AbstractStaxXMLReader staxXmlReader = createStaxXmlReader( + new ByteArrayInputStream(xml.getBytes("UTF-8"))); + + SAXSource source = new SAXSource(staxXmlReader, new InputSource()); + DOMResult result = new DOMResult(); + + transformer.transform(source, result); + + Node node1 = result.getNode().getFirstChild().getFirstChild(); + assertEquals(" ", node1.getTextContent()); + assertEquals(" Some text ", node1.getNextSibling().getTextContent()); + } + @Test public void lexicalHandler() throws Exception { Resource testLexicalHandlerXml = new ClassPathResource("testLexicalHandler.xml", getClass()); @@ -130,7 +156,7 @@ public Object answer(InvocationOnMock invocation) throws Throwable { verifyIdenticalInvocations(expectedLexicalHandler, actualLexicalHandler); } - private final LexicalHandler mockLexicalHandler() throws Exception { + private LexicalHandler mockLexicalHandler() throws Exception { LexicalHandler lexicalHandler = mock(LexicalHandler.class); willAnswer(new CopyCharsAnswer()).given(lexicalHandler).comment(any(char[].class), anyInt(), anyInt()); return lexicalHandler; diff --git a/spring-core/src/test/resources/org/springframework/util/xml/testContentHandler.xml b/spring-core/src/test/resources/org/springframework/util/xml/testContentHandler.xml index 680faab7ff02..062b7b79b97e 100644 --- a/spring-core/src/test/resources/org/springframework/util/xml/testContentHandler.xml +++ b/spring-core/src/test/resources/org/springframework/util/xml/testContentHandler.xml @@ -1,2 +1,2 @@ \ No newline at end of file + xmlns:prefix="http://www.greeting.com/goodbye/" h:person="Arjen"> Some text \ No newline at end of file