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)); + } + +}
