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


Reply via email to