Author: cmueller Date: Wed Apr 4 20:46:05 2012 New Revision: 1309588 URL: http://svn.apache.org/viewvc?rev=1309588&view=rev Log: CAMEL-3776: Add pooling support for JAXB data format
Modified: camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatTest.java Modified: camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java?rev=1309588&r1=1309587&r2=1309588&view=diff ============================================================================== --- camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java (original) +++ camel/trunk/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java Wed Apr 4 20:46:05 2012 @@ -31,6 +31,7 @@ import javax.xml.namespace.QName; import javax.xml.stream.FactoryConfigurationError; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; @@ -38,6 +39,7 @@ import javax.xml.transform.stream.Stream import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; import org.apache.camel.Exchange; +import org.apache.camel.TypeConverter; import org.apache.camel.spi.DataFormat; import org.apache.camel.support.ServiceSupport; import org.apache.camel.util.IOHelper; @@ -67,6 +69,7 @@ public class JaxbDataFormat extends Serv private String partClass; private Class<Object> partialClass; + private TypeConverter typeConverter; private Unmarshaller unmarshaller; private ReentrantLock lock = new ReentrantLock(); @@ -139,19 +142,21 @@ public class JaxbDataFormat extends Serv try { if (partialClass != null) { // partial unmarshalling - Source source; if (needFiltering(exchange)) { - source = new StreamSource(createNonXmlFilterReader(exchange, stream)); + Source source = new StreamSource(createNonXmlFilterReader(exchange, stream)); + answer = getUnmarshaller().unmarshal(source, partialClass); } else { - source = new StreamSource(stream); + XMLStreamReader xmlReader = typeConverter.convertTo(XMLStreamReader.class, stream); + answer = getUnmarshaller().unmarshal(xmlReader, partialClass); } - answer = getUnmarshaller().unmarshal(source, partialClass); + } else { if (needFiltering(exchange)) { NonXmlFilterReader reader = createNonXmlFilterReader(exchange, stream); answer = getUnmarshaller().unmarshal(reader); } else { - answer = getUnmarshaller().unmarshal(stream); + XMLStreamReader xmlReader = typeConverter.convertTo(XMLStreamReader.class, stream); + answer = getUnmarshaller().unmarshal(xmlReader); } } } finally { @@ -274,6 +279,7 @@ public class JaxbDataFormat extends Serv partialClass = camelContext.getClassResolver().resolveMandatoryClass(partClass, Object.class); } unmarshaller = getContext().createUnmarshaller(); + typeConverter = camelContext.getTypeConverter(); } @Override Modified: camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatTest.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatTest.java?rev=1309588&r1=1309587&r2=1309588&view=diff ============================================================================== --- camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatTest.java (original) +++ camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatTest.java Wed Apr 4 20:46:05 2012 @@ -27,6 +27,7 @@ import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; @@ -137,7 +138,7 @@ public class JaxbDataFormatTest { jaxbDataFormatMock.unmarshal(new DefaultExchange(camelContext), new ByteArrayInputStream(new byte[] {})); - verify(unmarshallerMock).unmarshal((InputStream) argThat(not(instanceOf(NonXmlFilterReader.class)))); + verify(unmarshallerMock).unmarshal((XMLStreamReader) argThat(instanceOf(XMLStreamReader.class))); } @Test