Author: cmueller
Date: Wed Apr 11 20:15:08 2012
New Revision: 1324978
URL: http://svn.apache.org/viewvc?rev=1324978&view=rev
Log:
CAMEL-3776: Add pooling support for JAXB data format
Modified:
camel/branches/camel-2.9.x/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
camel/branches/camel-2.9.x/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatTest.java
Modified:
camel/branches/camel-2.9.x/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java?rev=1324978&r1=1324977&r2=1324978&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
(original)
+++
camel/branches/camel-2.9.x/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbDataFormat.java
Wed Apr 11 20:15:08 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 partialClass;
+ private TypeConverter typeConverter;
private Unmarshaller unmarshaller;
private ReentrantLock lock = new ReentrantLock();
@@ -141,19 +144,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 {
@@ -276,6 +281,7 @@ public class JaxbDataFormat extends Serv
partialClass =
camelContext.getClassResolver().resolveMandatoryClass(partClass);
}
unmarshaller = getContext().createUnmarshaller();
+ typeConverter = camelContext.getTypeConverter();
}
@Override
Modified:
camel/branches/camel-2.9.x/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatTest.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatTest.java?rev=1324978&r1=1324977&r2=1324978&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatTest.java
(original)
+++
camel/branches/camel-2.9.x/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatTest.java
Wed Apr 11 20:15:08 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