Repository: jclouds
Updated Branches:
  refs/heads/master 3b42bafe2 -> 7aad59972


Fix autovalue class loading in karaf

When Class.forName is called for a class in a different bundle it will
fail as the default karaf class loader won't load classes from other
bundles.

I have fixed this by using the classloader of the original
(non-autovalue) type and assuming it will be in the same bundle as the
autovalue type (I think this is a reasonable assumtion).

So far the only place where I've actually seen this being an issue is
when using the jclouds-labs-google provider within karaf. It fails
when serialising the Firewall.Rule class within a FirewallOptions
object.


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

Branch: refs/heads/master
Commit: 7aad59972186dfee7920ab000195e259aa84a534
Parents: 3b42baf
Author: Duncan Grant <[email protected]>
Authored: Mon Sep 5 09:40:48 2016 +0100
Committer: Ignasi Barrera <[email protected]>
Committed: Mon Sep 5 14:11:59 2016 +0200

----------------------------------------------------------------------
 .../DeserializationConstructorAndReflectiveTypeAdapterFactory.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/7aad5997/core/src/main/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactory.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactory.java
 
b/core/src/main/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactory.java
index 852a1a1..85293e2 100644
--- 
a/core/src/main/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactory.java
+++ 
b/core/src/main/java/org/jclouds/json/internal/DeserializationConstructorAndReflectiveTypeAdapterFactory.java
@@ -132,7 +132,7 @@ public final class 
DeserializationConstructorAndReflectiveTypeAdapterFactory imp
          String autoClassName = type.getRawType().getName().replace('$', '_')
                .replace(packageName + ".", packageName + ".AutoValue_");
          try {
-            type = (TypeToken<T>) TypeToken.get(Class.forName(autoClassName));
+            type = (TypeToken<T>) 
TypeToken.get(type.getRawType().getClassLoader().loadClass(autoClassName));
          } catch (ClassNotFoundException ignored) {
          }
       }

Reply via email to