Fixed Jaxb2Marshaller's partial unmarshalling feature to consistently apply to all sources

Issue: SPR-10282
This commit is contained in:
Juergen Hoeller 2013-03-19 10:51:30 +01:00
parent dc9fee0b5c
commit 283b3ee44b
1 changed files with 7 additions and 3 deletions

View File

@ -720,7 +720,7 @@ public class Jaxb2Marshaller
return unmarshalStaxSource(unmarshaller, source); return unmarshalStaxSource(unmarshaller, source);
} }
else if (this.mappedClass != null) { else if (this.mappedClass != null) {
return unmarshaller.unmarshal(source, this.mappedClass); return unmarshaller.unmarshal(source, this.mappedClass).getValue();
} }
else { else {
return unmarshaller.unmarshal(source); return unmarshaller.unmarshal(source);
@ -734,12 +734,16 @@ public class Jaxb2Marshaller
protected Object unmarshalStaxSource(Unmarshaller jaxbUnmarshaller, Source staxSource) throws JAXBException { protected Object unmarshalStaxSource(Unmarshaller jaxbUnmarshaller, Source staxSource) throws JAXBException {
XMLStreamReader streamReader = StaxUtils.getXMLStreamReader(staxSource); XMLStreamReader streamReader = StaxUtils.getXMLStreamReader(staxSource);
if (streamReader != null) { if (streamReader != null) {
return jaxbUnmarshaller.unmarshal(streamReader); return (this.mappedClass != null ?
jaxbUnmarshaller.unmarshal(streamReader, this.mappedClass).getValue() :
jaxbUnmarshaller.unmarshal(streamReader));
} }
else { else {
XMLEventReader eventReader = StaxUtils.getXMLEventReader(staxSource); XMLEventReader eventReader = StaxUtils.getXMLEventReader(staxSource);
if (eventReader != null) { if (eventReader != null) {
return jaxbUnmarshaller.unmarshal(eventReader); return (this.mappedClass != null ?
jaxbUnmarshaller.unmarshal(eventReader, this.mappedClass).getValue() :
jaxbUnmarshaller.unmarshal(eventReader));
} }
else { else {
throw new IllegalArgumentException("StaxSource contains neither XMLStreamReader nor XMLEventReader"); throw new IllegalArgumentException("StaxSource contains neither XMLStreamReader nor XMLEventReader");