Repository: camel
Updated Branches:
  refs/heads/camel-2.16.x d40de6907 -> 7bcfa8c3b


CAMEL-10282 - camel-avro, fixed issue with OSGi and redeployment


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7bcfa8c3
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7bcfa8c3
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7bcfa8c3

Branch: refs/heads/camel-2.16.x
Commit: 7bcfa8c3baf2a8a5a61ea58fe7fe0a1d577fc540
Parents: d40de69
Author: Paolo Antinori <[email protected]>
Authored: Thu Sep 1 09:36:04 2016 +0200
Committer: Andrea Cosentino <[email protected]>
Committed: Thu Sep 1 10:50:20 2016 +0200

----------------------------------------------------------------------
 .../camel/dataformat/avro/AvroDataFormat.java   | 11 ++++++++-
 .../dataformat/avro/SpecificDataNoCache.java    | 24 ++++++++++++++++++++
 2 files changed, 34 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/7bcfa8c3/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/AvroDataFormat.java
----------------------------------------------------------------------
diff --git 
a/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/AvroDataFormat.java
 
b/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/AvroDataFormat.java
index 9a03373..6a6bd19 100644
--- 
a/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/AvroDataFormat.java
+++ 
b/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/AvroDataFormat.java
@@ -29,6 +29,7 @@ import org.apache.avro.io.Decoder;
 import org.apache.avro.io.DecoderFactory;
 import org.apache.avro.io.Encoder;
 import org.apache.avro.io.EncoderFactory;
+import org.apache.avro.specific.SpecificData;
 import org.apache.avro.specific.SpecificDatumReader;
 import org.apache.avro.specific.SpecificDatumWriter;
 import org.apache.camel.CamelContext;
@@ -134,7 +135,15 @@ public class AvroDataFormat extends ServiceSupport 
implements DataFormat, DataFo
     public Object unmarshal(Exchange exchange, InputStream inputStream) throws 
Exception {
         ObjectHelper.notNull(actualSchema, "schema", this);
 
-        DatumReader<GenericRecord> reader = new 
SpecificDatumReader<GenericRecord>(actualSchema);
+        ClassLoader classLoader = null;
+        Class<?> clazz = 
camelContext.getClassResolver().resolveClass(actualSchema.getFullName());
+
+        if (clazz != null) {
+            classLoader = clazz.getClassLoader();
+        }
+        SpecificData specificData = new SpecificDataNoCache(classLoader);
+        DatumReader<GenericRecord> reader = new 
SpecificDatumReader<GenericRecord>(null, null, specificData);
+        reader.setSchema(actualSchema);
         Decoder decoder = DecoderFactory.get().binaryDecoder(inputStream, 
null);
         Object result = reader.read(null, decoder);
         return result;

http://git-wip-us.apache.org/repos/asf/camel/blob/7bcfa8c3/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/SpecificDataNoCache.java
----------------------------------------------------------------------
diff --git 
a/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/SpecificDataNoCache.java
 
b/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/SpecificDataNoCache.java
new file mode 100644
index 0000000..40ea43f
--- /dev/null
+++ 
b/components/camel-avro/src/main/java/org/apache/camel/dataformat/avro/SpecificDataNoCache.java
@@ -0,0 +1,24 @@
+package org.apache.camel.dataformat.avro;
+
+import org.apache.avro.Schema;
+import org.apache.avro.specific.SpecificData;
+
+/**
+ * Created by pantinor on 31/08/16.
+ */
+public class SpecificDataNoCache extends SpecificData {
+
+    public SpecificDataNoCache() {
+        super();
+    }
+
+    public SpecificDataNoCache(ClassLoader classLoader) {
+        super(classLoader);
+    }
+
+    public Object newRecord(Object old, Schema schema) {
+        Class c = new SpecificDataNoCache().getClass(schema);
+        return c == null ? super.newRecord(old, schema) : (c.isInstance(old) ? 
old : newInstance(c, schema));
+    }
+
+}

Reply via email to