Repository: brooklyn-server
Updated Branches:
  refs/heads/master c95d6ff86 -> 196ce93a6


BROOKLYN-338: BrooklynApi fixes for karaf

These aren’t enough to fix BROOKLYN-338, but it’s a start:
* Ensures rest-client imports the resteasy marshallers package,
  which it calls with reflection (via the resteasy ProxyBuilder).
* Passes the ProxyBuilder a classloader that has access to the
  rest-api classes and to rest-client’s classloader (which thus
  can access the marshallers).


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/16eb543c
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/16eb543c
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/16eb543c

Branch: refs/heads/master
Commit: 16eb543c6d158deee11dae4613eb5706cb304364
Parents: 375bb88
Author: Aled Sage <[email protected]>
Authored: Tue Aug 23 23:35:47 2016 +0100
Committer: Aled Sage <[email protected]>
Committed: Mon Aug 29 09:35:27 2016 +0100

----------------------------------------------------------------------
 rest/rest-client/pom.xml                        | 17 ++++++++++++++++-
 .../brooklyn/rest/client/BrooklynApi.java       | 20 +++++++++++++++++---
 2 files changed, 33 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/16eb543c/rest/rest-client/pom.xml
----------------------------------------------------------------------
diff --git a/rest/rest-client/pom.xml b/rest/rest-client/pom.xml
index 069bce5..2984331 100644
--- a/rest/rest-client/pom.xml
+++ b/rest/rest-client/pom.xml
@@ -144,5 +144,20 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
-    
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        
<Import-Package>*,org.jboss.resteasy.client.core.marshallers</Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/16eb543c/rest/rest-client/src/main/java/org/apache/brooklyn/rest/client/BrooklynApi.java
----------------------------------------------------------------------
diff --git 
a/rest/rest-client/src/main/java/org/apache/brooklyn/rest/client/BrooklynApi.java
 
b/rest/rest-client/src/main/java/org/apache/brooklyn/rest/client/BrooklynApi.java
index d222e39..822e296 100644
--- 
a/rest/rest-client/src/main/java/org/apache/brooklyn/rest/client/BrooklynApi.java
+++ 
b/rest/rest-client/src/main/java/org/apache/brooklyn/rest/client/BrooklynApi.java
@@ -43,9 +43,11 @@ import org.apache.http.impl.client.HttpClients;
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.jboss.resteasy.client.ClientExecutor;
 import org.jboss.resteasy.client.ClientResponse;
-import org.jboss.resteasy.client.ProxyFactory;
+import org.jboss.resteasy.client.ProxyBuilder;
 import org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor;
+import org.jboss.resteasy.client.core.extractors.DefaultEntityExtractorFactory;
 import org.jboss.resteasy.specimpl.BuiltResponse;
+import org.jboss.resteasy.spi.ResteasyProviderFactory;
 import org.jboss.resteasy.util.GenericType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -68,9 +70,10 @@ import org.apache.brooklyn.rest.api.ServerApi;
 import org.apache.brooklyn.rest.api.UsageApi;
 import org.apache.brooklyn.rest.api.VersionApi;
 import org.apache.brooklyn.rest.client.util.http.BuiltResponsePreservingError;
+import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.apache.brooklyn.util.javalang.AggregateClassLoader;
 import org.apache.brooklyn.util.net.Urls;
-import org.apache.brooklyn.util.os.Os;
 
 import io.swagger.annotations.ApiOperation;
 
@@ -265,7 +268,18 @@ public class BrooklynApi {
 
     @SuppressWarnings("unchecked")
     private <T> T proxy(Class<T> clazz) {
-        final T result0 = ProxyFactory.create(clazz, target, clientExecutor);
+        AggregateClassLoader aggregateClassLoader =  
AggregateClassLoader.newInstanceWithNoLoaders();
+        aggregateClassLoader.addLast(clazz.getClassLoader());
+        aggregateClassLoader.addLast(getClass().getClassLoader());
+
+        final T result0 = ProxyBuilder.build(clazz, target)
+                .executor(clientExecutor)
+                .classloader(aggregateClassLoader)
+                .providerFactory(ResteasyProviderFactory.getInstance())
+                .extractorFactory(new DefaultEntityExtractorFactory())
+                .requestAttributes(MutableMap.<String, Object>of())
+                .now();
+
         return (T) Proxy.newProxyInstance(clazz.getClassLoader(), new 
Class<?>[] { clazz }, new InvocationHandler() {
             @Override
             public Object invoke(Object proxy, Method method, Object[] args) 
throws Throwable {

Reply via email to