From 1c5cab2a4069ec3239c531d741aeb07a434f521b Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 3 Feb 2014 16:56:24 -0500 Subject: [PATCH] Add external entity test Issue: SPR-11376 --- ...b2CollectionHttpMessageConverterTests.java | 52 +++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverterTests.java b/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverterTests.java index ad189fd66252..344362036e68 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverterTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/xml/Jaxb2CollectionHttpMessageConverterTests.java @@ -28,11 +28,15 @@ import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import javax.xml.stream.XMLInputFactory; import org.junit.Before; import org.junit.Test; import org.springframework.core.ParameterizedTypeReference; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; import org.springframework.http.MockHttpInputMessage; +import org.springframework.http.converter.HttpMessageConverter; /** * Test fixture for {@link Jaxb2CollectionHttpMessageConverter}. @@ -120,6 +124,48 @@ public void readXmlTypeSet() throws Exception { assertTrue("Invalid result", result.contains(new TestType("2"))); } + @Test + @SuppressWarnings("unchecked") + public void readXmlRootElementWithExternalEntity() throws Exception { + + Resource external = new ClassPathResource("external.txt", getClass()); + String content = "\n" + + " ]>" + + " &ext;"; + MockHttpInputMessage inputMessage = new MockHttpInputMessage(content.getBytes("UTF-8")); + + Collection result = converter.read(rootElementListType, null, inputMessage); + assertEquals(1, result.size()); + assertEquals("", result.iterator().next().external); + } + + @Test + @SuppressWarnings("unchecked") + public void readXmlRootElementExternalEntityEnabled() throws Exception { + + Resource external = new ClassPathResource("external.txt", getClass()); + String content = "\n" + + " ]>" + + " &ext;"; + MockHttpInputMessage inputMessage = new MockHttpInputMessage(content.getBytes("UTF-8")); + + // Now read with + Jaxb2CollectionHttpMessageConverter c = new Jaxb2CollectionHttpMessageConverter>() { + @Override + protected XMLInputFactory createXmlInputFactory() { + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + inputFactory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, true); + return inputFactory; + } + }; + + Collection result = c.read(rootElementListType, null, inputMessage); + assertEquals(1, result.size()); + assertEquals("Foo Bar", result.iterator().next().external); + } + @XmlRootElement public static class RootElement { @@ -134,6 +180,9 @@ public RootElement(String s) { @XmlElement public TestType type = new TestType(); + @XmlElement(required=false) + public String external; + @Override public boolean equals(Object o) { if (this == o) { @@ -181,9 +230,6 @@ public boolean equals(Object o) { public int hashCode() { return s.hashCode(); } - - - } }