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 {
