From 8efac21c2b316c9e4d4e2b51ec33db0e666051e7 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 13 Aug 2013 10:55:44 +0200 Subject: [PATCH] Support 'empty' StreamSource in Jaxb2Marshaller Added support for StreamSources that do not have a InputStream or Reader, but do have a System ID. Issue: 10828 --- .../oxm/jaxb/Jaxb2Marshaller.java | 3 +++ .../oxm/jaxb/Jaxb2UnmarshallerTests.java | 19 +++++++++++++++---- .../org/springframework/oxm/jaxb/jaxb2.xml | 5 +++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 spring-oxm/src/test/resources/org/springframework/oxm/jaxb/jaxb2.xml diff --git a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java index cb2eeeb815..bbf775452e 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java @@ -784,6 +784,9 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi else if (streamSource.getReader() != null) { inputSource = new InputSource(streamSource.getReader()); } + else { + inputSource = new InputSource(streamSource.getSystemId()); + } } try { diff --git a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java index 04842a7366..a802392a39 100644 --- a/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java +++ b/spring-oxm/src/test/java/org/springframework/oxm/jaxb/Jaxb2UnmarshallerTests.java @@ -16,8 +16,9 @@ package org.springframework.oxm.jaxb; +import java.io.File; +import java.io.IOException; import java.io.StringReader; - import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.xml.bind.JAXBElement; @@ -26,7 +27,11 @@ import javax.xml.stream.XMLStreamReader; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; +import static org.junit.Assert.*; import org.junit.Test; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.mock; + import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.oxm.AbstractUnmarshallerTests; @@ -36,9 +41,6 @@ import org.springframework.oxm.jaxb.test.Flights; import org.springframework.oxm.mime.MimeContainer; import org.springframework.util.xml.StaxUtils; -import static org.junit.Assert.*; -import static org.mockito.BDDMockito.*; - /** * @author Arjen Poutsma * @author Biju Kunjummen @@ -134,4 +136,13 @@ public class Jaxb2UnmarshallerTests extends AbstractUnmarshallerTests { "test", airplane.getValue().getName()); } + @Test + public void unmarshalFile() throws IOException { + Resource resource = new ClassPathResource("jaxb2.xml", getClass()); + File file = resource.getFile(); + + Flights f = (Flights) unmarshaller.unmarshal(new StreamSource(file)); + testFlights(f); + } + } diff --git a/spring-oxm/src/test/resources/org/springframework/oxm/jaxb/jaxb2.xml b/spring-oxm/src/test/resources/org/springframework/oxm/jaxb/jaxb2.xml new file mode 100644 index 0000000000..4428a1dc7a --- /dev/null +++ b/spring-oxm/src/test/resources/org/springframework/oxm/jaxb/jaxb2.xml @@ -0,0 +1,5 @@ + + + 42 + + \ No newline at end of file