StaxStreamXMLReader ignores significant whitespace
The StaxStreamXMLReader no longer handles all whitespace as ignorable whitespace. Issue: SPR-12000
This commit is contained in:
@@ -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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -217,11 +217,6 @@ class StaxStreamXMLReader extends AbstractStaxXMLReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void handleCharacters() 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) {
|
if (XMLStreamConstants.CDATA == this.reader.getEventType() && getLexicalHandler() != null) {
|
||||||
getLexicalHandler().startCDATA();
|
getLexicalHandler().startCDATA();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,15 +16,22 @@
|
|||||||
|
|
||||||
package org.springframework.util.xml;
|
package org.springframework.util.xml;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import javax.xml.stream.XMLInputFactory;
|
import javax.xml.stream.XMLInputFactory;
|
||||||
import javax.xml.stream.XMLStreamException;
|
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.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import static org.mockito.BDDMockito.*;
|
import static org.mockito.BDDMockito.*;
|
||||||
import org.mockito.invocation.InvocationOnMock;
|
import org.mockito.invocation.InvocationOnMock;
|
||||||
import org.mockito.stubbing.Answer;
|
import org.mockito.stubbing.Answer;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
import org.xml.sax.Attributes;
|
import org.xml.sax.Attributes;
|
||||||
import org.xml.sax.ContentHandler;
|
import org.xml.sax.ContentHandler;
|
||||||
import org.xml.sax.InputSource;
|
import org.xml.sax.InputSource;
|
||||||
@@ -103,6 +110,25 @@ public abstract class AbstractStaxXMLReaderTestCase {
|
|||||||
verifyIdenticalInvocations(standardContentHandler, contentHandler);
|
verifyIdenticalInvocations(standardContentHandler, contentHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whitespace() throws Exception {
|
||||||
|
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><test><node1> </node1><node2> Some text </node2></test>";
|
||||||
|
|
||||||
|
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
|
@Test
|
||||||
public void lexicalHandler() throws Exception {
|
public void lexicalHandler() throws Exception {
|
||||||
Resource testLexicalHandlerXml = new ClassPathResource("testLexicalHandler.xml", getClass());
|
Resource testLexicalHandlerXml = new ClassPathResource("testLexicalHandler.xml", getClass());
|
||||||
@@ -130,7 +156,7 @@ public abstract class AbstractStaxXMLReaderTestCase {
|
|||||||
verifyIdenticalInvocations(expectedLexicalHandler, actualLexicalHandler);
|
verifyIdenticalInvocations(expectedLexicalHandler, actualLexicalHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final LexicalHandler mockLexicalHandler() throws Exception {
|
private LexicalHandler mockLexicalHandler() throws Exception {
|
||||||
LexicalHandler lexicalHandler = mock(LexicalHandler.class);
|
LexicalHandler lexicalHandler = mock(LexicalHandler.class);
|
||||||
willAnswer(new CopyCharsAnswer()).given(lexicalHandler).comment(any(char[].class), anyInt(), anyInt());
|
willAnswer(new CopyCharsAnswer()).given(lexicalHandler).comment(any(char[].class), anyInt(), anyInt());
|
||||||
return lexicalHandler;
|
return lexicalHandler;
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
<h:hello xmlns:h="http://www.greeting.com/hello/" id="a1" h:person="David"><prefix:goodbye
|
<h:hello xmlns:h="http://www.greeting.com/hello/" id="a1" h:person="David"><prefix:goodbye
|
||||||
xmlns:prefix="http://www.greeting.com/goodbye/" h:person="Arjen"/></h:hello>
|
xmlns:prefix="http://www.greeting.com/goodbye/" h:person="Arjen"> Some text </prefix:goodbye><h:so-long> </h:so-long></h:hello>
|
||||||
Reference in New Issue
Block a user