Hello everyone,
First of all thanks for the great jclouds library :)
In my project we use cxf (camel-cxf 2.9.0 to be more specific) to
deliver rest services to the user and camel itself to integrate
several systems together. We would also like to use jclouds (currently
1.3.1) to manage our clouds installations (based on open stack and
amazon). Unfortunatelly these two frameworks do not work well
together. The problem is connected to
http://www.dankulp.com/blog/2011/11/apache-cxf-in-osgi/.
CXF uses library:
mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jsr311-
api-1.1.1/1.9.0
which causes following exception in jclouds:
Error in custom provider, java.lang.RuntimeException: method is
intended solely to set constants: public abstract
com.google.common.util.concurrent.ListenableFuture
org.jclouds.ec2.services.AvailabilityZoneAndRegionAsyncClient.describeRegions(org.jclouds.ec2.options.DescribeRegionsOptions[])
while locating org.jclouds.ec2.config.EC2RestClientModule
$RegionIdsToURI
at
org.jclouds.aws.config.AWSRestClientModule.bindRegionsToProvider(AWSRestClientModule.java:
103)
while locating java.util.Map<java.lang.String, java.net.URI>
annotated with @org.jclouds.location.Region()
for parameter 1 at org.jclouds.ec2.config.EC2RestClientModule
$RegionIdToZoneId.<init>(EC2RestClientModule.java:147)
at org.jclouds.ec2.config.EC2RestClientModule
$RegionIdToZoneId.class(EC2RestClientModule.java:138)
while locating org.jclouds.ec2.config.EC2RestClientModule
$RegionIdToZoneId
at
org.jclouds.aws.config.WithZonesFormSigningRestClientModule.bindZonesToProvider(WithZonesFormSigningRestClientModule.java:
60)
while locating java.util.Map<java.lang.String, java.lang.String>
annotated with @org.jclouds.location.Zone()
for parameter 4 at
org.jclouds.location.suppliers.ZoneToRegionToProviderOrJustProvider.<init>(ZoneToRegionToProviderOrJustProvider.java:
56)
at
org.jclouds.location.suppliers.ZoneToRegionToProviderOrJustProvider.class(ZoneToRegionToProviderOrJustProvider.java:
47)
while locating
org.jclouds.location.suppliers.ZoneToRegionToProviderOrJustProvider
at
org.jclouds.compute.config.BindComputeSuppliersByClass.bindLocationSupplier(BindComputeSuppliersByClass.java:
83)
while locating com.google.common.base.Supplier<java.util.Set<?
extends org.jclouds.domain.Location>>
at
org.jclouds.location.config.LocationModule.supplyLocationCache(LocationModule.java:
58)
at
org.jclouds.location.config.LocationModule.supplyLocationCache(LocationModule.java:
58)
while locating com.google.common.base.Supplier<java.util.Set<?
extends org.jclouds.domain.Location>> annotated with
@org.jclouds.collect.Memoized()
for parameter 3 at
org.jclouds.aws.ec2.compute.functions.AWSRunningInstanceToNodeMetadata.<init>(AWSRunningInstanceToNodeMetadata.java:
58)
at
org.jclouds.aws.ec2.compute.functions.AWSRunningInstanceToNodeMetadata.class(AWSRunningInstanceToNodeMetadata.java:
58)
while locating
org.jclouds.aws.ec2.compute.functions.AWSRunningInstanceToNodeMetadata
while locating
org.jclouds.ec2.compute.functions.RunningInstanceToNodeMetadata
at
org.jclouds.ec2.compute.config.EC2ComputeServiceDependenciesModule.bindNodeConverter(EC2ComputeServiceDependenciesModule.java:
123)
at
org.jclouds.ec2.compute.config.EC2ComputeServiceDependenciesModule.bindNodeConverter(EC2ComputeServiceDependenciesModule.java:
123)
while locating
com.google.common.base.Function<org.jclouds.ec2.domain.RunningInstance,
org.jclouds.compute.domain.NodeMetadata>
for parameter 1 at
org.jclouds.aws.ec2.compute.strategy.AWSEC2GetNodeMetadataStrategy.<init>(AWSEC2GetNodeMetadataStrategy.java:
50)
at
org.jclouds.aws.ec2.compute.strategy.AWSEC2GetNodeMetadataStrategy.class(AWSEC2GetNodeMetadataStrategy.java:
50)
while locating
org.jclouds.aws.ec2.compute.strategy.AWSEC2GetNodeMetadataStrategy
while locating
org.jclouds.ec2.compute.strategy.EC2GetNodeMetadataStrategy
at
org.jclouds.compute.config.BindComputeStrategiesByClass.bindGetNodeMetadataStrategy(BindComputeStrategiesByClass.java:
79)
while locating org.jclouds.compute.strategy.GetNodeMetadataStrategy
for parameter 0 at
org.jclouds.compute.predicates.NodeTerminated.<init>(NodeTerminated.java:
49)
at
org.jclouds.compute.predicates.NodeTerminated.class(NodeTerminated.java:
40)
while locating org.jclouds.compute.predicates.NodeTerminated
Caused by: java.lang.RuntimeException: method is intended solely to
set constants: public abstract
com.google.common.util.concurrent.ListenableFuture
org.jclouds.ec2.services.AvailabilityZoneAndRegionAsyncClient.describeRegions(org.jclouds.ec2.options.DescribeRegionsOptions[])
at
org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:
128)
at $Proxy84.describeRegions(Unknown Source)
at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown
Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
at $Proxy85.describeRegions(Unknown Source)
at org.jclouds.ec2.config.EC2RestClientModule
$RegionIdsToURI.get(EC2RestClientModule.java:128)
at org.jclouds.ec2.config.EC2RestClientModule
$RegionIdsToURI.get(EC2RestClientModule.java:109)
at
com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:
55)
at com.google.inject.internal.ProviderToInternalFactoryAdapter
$1.call(ProviderToInternalFactoryAdapter.java:46)
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:
1031)
at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:
40)
at com.google.inject.Scopes$1$1.get(Scopes.java:65)
Do you have any clue how I can solve this conflict and allow to live
jclouds and cxf in the same osgi container?
greetings from Krakow,
Marek