Java Openstack juno和Jclouds API生成URISyntaxException,因为响应中有额外的空间

Java Openstack juno和Jclouds API生成URISyntaxException,因为响应中有额外的空间,java,openstack,jclouds,openstack-juno,Java,Openstack,Jclouds,Openstack Juno,Openstack juno orchestration端点有额外的响应空间,所以在使用Jclouds API使用Openstack时出现异常,我们能做些什么吗 { "endpoints": [{ "adminURL": "http://115.249.4.66:8004/v1/38bc976fd99d4ef4b6d48be6729b8576", "region": "IPTC", "internalURL": "http://115.24

Openstack juno orchestration端点有额外的响应空间,所以在使用Jclouds API使用Openstack时出现异常,我们能做些什么吗

{
    "endpoints": [{
        "adminURL": "http://115.249.4.66:8004/v1/38bc976fd99d4ef4b6d48be6729b8576",
        "region": "IPTC",
        "internalURL": "http://115.249.4.66:8004/v1/38bc976fd99d4ef4b6d48be6729b8576 ",
        "id": "64667a399bb446d0bf0f6537e113ec52",
        "publicURL": "http://115.249.4.66:8004/v1/38bc976fd99d4ef4b6d48be6729b8576"
    }],
    "endpoints_links": [],
    "type": "orchestration",
    "name": "heat"
},
如上图所示

"htttp://115.249.4.66:8004/v1/38bc976fd99d4ef4b6d48be6729b8576 “

在关闭URL的双引号之前有一个额外的空间(我用http手动添加了额外的“t”)

但是在所有其他端点中没有额外的空间

来自trystack.org的相同回复如下所示

{
    "endpoints": [{
        "adminURL": "http://10.100.0.222:8004/v1/18b792582bba4385ac9c4820af4a8b5e",
        "region": "RegionOne",
        "internalURL": "http://10.100.0.222:8004/v1/18b792582bba4385ac9c4820af4a8b5e",
        "id": "38fa4f9afce34d4ca0f5e0f90fd758dd",
        "publicURL": "http://8.21.28.222:8004/v1/18b792582bba4385ac9c4820af4a8b5e"
    }],
    "endpoints_links": [],
    "type": "orchestration",
    "name": "heat"
},
正如您在URL中看到的“htttp://10.100.0.222:8004/v1/18b792582bba4385ac9c4820af4a8b5e", 双引号前没有空格。(我用http手动添加了额外的“t”)

由于URL有额外的空间,jclouds中的错误如下:

Exception in thread "main" com.google.common.util.concurrent.UncheckedExecutionException: com.google.gson.JsonIOException: java.net.URISyntaxException: Illegal character in path at index 61: htttp://115.249.4.66:8004/v1/38bc976fd99d4ef4b6d48be6729b8576 
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3934)
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821)
    at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827)
    at org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule$2.get(KeystoneAuthenticationModule.java:234)
    at org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule$2.get(KeystoneAuthenticationModule.java:231)
    at org.jclouds.openstack.keystone.v2_0.suppliers.LocationIdToURIFromAccessForTypeAndVersion.get(LocationIdToURIFromAccessForTypeAndVersion.java:94)
    at org.jclouds.openstack.keystone.v2_0.suppliers.LocationIdToURIFromAccessForTypeAndVersion.get(LocationIdToURIFromAccessForTypeAndVersion.java:54)
    at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier$SetAndThrowAuthorizationExceptionSupplierBackedLoader.load(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:73)
    at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier$SetAndThrowAuthorizationExceptionSupplierBackedLoader.load(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:57)
    at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524)
    at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317)
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280)
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3934)
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821)
    at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:119)
    at org.jclouds.openstack.neutron.v2.functions.VersionAwareRegionToEndpoint.apply(VersionAwareRegionToEndpoint.java:55)
    at org.jclouds.openstack.neutron.v2.functions.VersionAwareRegionToEndpoint.apply(VersionAwareRegionToEndpoint.java:33)
    at org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointInParametersOrNull(RestAnnotationProcessor.java:495)
    at org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointFor(RestAnnotationProcessor.java:518)
    at org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:188)
    at org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:129)
    at org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:188)
    at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:84)
    at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:73)
    at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:44)
    at org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
    at com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87)
    at com.sun.proxy.$Proxy62.list(Unknown Source)
    at example.JcloudsDemo.Operations(JcloudsDemo.java:159)
    at example.JcloudsDemo.main(JcloudsDemo.java:146)
Caused by: com.google.gson.JsonIOException: java.net.URISyntaxException: Illegal character in path at index 61: htttp://115.249.4.66:8004/v1/38bc976fd99d4ef4b6d48be6729b8576 
    at com.google.gson.internal.bind.TypeAdapters$19.read(TypeAdapters.java:469)
    at com.google.gson.internal.bind.TypeAdapters$19.read(TypeAdapters.java:458)
    at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$ParameterReader.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:272)
    at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:184)
    at org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.readAndBuild(NullFilteringTypeAdapterFactories.java:90)
    at org.jclouds.json.internal.NullFilteringTypeAdapterFactories$SetTypeAdapter.read(NullFilteringTypeAdapterFactories.java:180)
    at org.jclouds.json.internal.NullFilteringTypeAdapterFactories$SetTypeAdapter.read(NullFilteringTypeAdapterFactories.java:166)
    at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$ParameterReader.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:272)
    at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:184)
    at org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.readAndBuild(NullFilteringTypeAdapterFactories.java:90)
    at org.jclouds.json.internal.NullFilteringTypeAdapterFactories$SetTypeAdapter.read(NullFilteringTypeAdapterFactories.java:180)
    at org.jclouds.json.internal.NullFilteringTypeAdapterFactories$SetTypeAdapter.read(NullFilteringTypeAdapterFactories.java:166)
    at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$ParameterReader.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:272)
    at org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:184)
    at com.google.gson.Gson.fromJson(Gson.java:803)
    at org.jclouds.http.functions.ParseFirstJsonValueNamed.apply(ParseFirstJsonValueNamed.java:80)
    at org.jclouds.http.functions.ParseFirstJsonValueNamed.apply(ParseFirstJsonValueNamed.java:44)
    at org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:90)
    at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:73)
    at org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:44)
    at org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:156)
    at org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:123)
    at com.sun.proxy.$Proxy55.authenticateWithTenantNameAndCredentials(Unknown Source)
    at org.jclouds.openstack.keystone.v2_0.functions.AuthenticatePasswordCredentials.authenticateWithTenantName(AuthenticatePasswordCredentials.java:43)
    at org.jclouds.openstack.keystone.v2_0.functions.AuthenticatePasswordCredentials.authenticateWithTenantName(AuthenticatePasswordCredentials.java:31)
    at org.jclouds.openstack.keystone.v2_0.functions.internal.BaseAuthenticator.apply(BaseAuthenticator.java:79)
    at org.jclouds.openstack.keystone.v2_0.functions.internal.BaseAuthenticator.apply(BaseAuthenticator.java:36)
    at com.google.common.cache.CacheLoader$FunctionToCacheLoader.load(CacheLoader.java:151)
    at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524)
    at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317)
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280)
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195)
... 33 more
Caused by: java.net.URISyntaxException: Illegal character in path at index 61: htttp://115.249.4.66:8004/v1/38bc976fd99d4ef4b6d48be6729b8576 
    at java.net.URI$Parser.fail(URI.java:2829)
    at java.net.URI$Parser.checkChars(URI.java:3002)
    at java.net.URI$Parser.parseHierarchical(URI.java:3086)
    at java.net.URI$Parser.parse(URI.java:3034)
    at java.net.URI.<init>(URI.java:595)
    at com.google.gson.internal.bind.TypeAdapters$19.read(TypeAdapters.java:467)
    ... 64 more
线程“main”中的异常com.google.common.util.concurrent.UncheckedExecutionException:com.google.gson.jsoniexception:java.net.URISyntaxException:索引61处路径中的非法字符:htttp://115.249.4.66:8004/v1/38bc976fd99d4ef4b6d48be6729b8576 位于com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201) 位于com.google.common.cache.LocalCache.get(LocalCache.java:3934) 位于com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938) 位于com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821) 位于com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827) 位于org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule$2.get(KeystoneAuthenticationModule.java:234) 位于org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule$2.get(KeystoneAuthenticationModule.java:231) 位于org.jclouds.openstack.keystone.v2_0.suppliers.LocationIdToURIFromAccessForTypeAndVersion.get(LocationIdToURIFromAccessForTypeAndVersion.java:94) 位于org.jclouds.openstack.keystone.v2_0.suppliers.LocationIdToURIFromAccessForTypeAndVersion.get(LocationIdToURIFromAccessForTypeAndVersion.java:54) 在org.jclouds.rest.suppliers.MemorizedRetryOnTimeExputtNotAuthorizationExceptionsSupplier$setandRowAuthorizationExceptionsSupplierBackedLoader.load(MemorizedRetryOnTimeExputtNotAuthorizationExceptionsSupplier.java:73) 在org.jclouds.rest.suppliers.MemorizedRetryOnTimeExputtNotAuthorizationExceptionsSupplier$setandRowAuthorizationExceptionsSupplierBackedLoader.load(MemorizedRetryOnTimeExputtNotAuthorizationExceptionsSupplier.java:57) 在com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524) 位于com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317) 位于com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280) 位于com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195) 位于com.google.common.cache.LocalCache.get(LocalCache.java:3934) 位于com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938) 位于com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821) 在org.jclouds.rest.suppliers.memoIzedRetryontimeBurtNotAuthorizationExceptionsSupplier.get(memoIzedRetryontimeBurtNotAuthorizationExceptionsSupplier.java:119) 位于org.jclouds.openstack.中子.v2.functions.VersionAwareRegionToEndpoint.apply(VersionAwareRegionToEndpoint.java:55) 位于org.jclouds.openstack.中子.v2.functions.VersionAwareRegionToEndpoint.apply(VersionAwareRegionToEndpoint.java:33) 位于org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointInputParametersOrNull(RestAnnotationProcessor.java:495) 位于org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointFor(RestAnnotationProcessor.java:518) 位于org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:188) 位于org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:129) 位于org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:188) 位于org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:84) 位于org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:73) 位于org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:44) 位于org.jclouds.reflect.FunctionalReflection$functionalLocationHandler.handleInvocation(FunctionalReflection.java:117) 位于com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87) 位于com.sun.proxy.$Proxy62.list(未知来源) 例如JcloudsDemo.Operations(JcloudsDemo.java:159) 例如JcloudsDemo.main(JcloudsDemo.java:146) 原因:com.google.gson.json异常:java.net.URISyntaxException:索引61处路径中的非法字符:htttp://115.249.4.66:8004/v1/38bc976fd99d4ef4b6d48be6729b8576 位于com.google.gson.internal.bind.TypeAdapters$19.read(TypeAdapters.java:469) 位于com.google.gson.internal.bind.TypeAdapters$19.read(TypeAdapters.java:458) 位于org.jclouds.json.internal.DeserializationConstructorAndReflectionTypeAdapterFactory$ParameterReader.read(DeserializationConstructorAndReflectionTypeAdapterFactory.java:272) 位于org.jclouds.json.internal.DeserializationConstructorAndReflectionTypeAdapterFactory$DeserializationInParameterizedConstructor.read(DeserializationConstructorAndReflectionTypeAdapterFactory.java:184) 位于org.jclouds.json.internal.NullFilteringTypeAdapterFactorys$IterableTypeAdapter.readAndBuild(NullFilteringTypeAdapterFactorys.java:90) 位于org.jclouds.json.internal.nullFilteringTypeAdapterFactorys$SetTypeAdapter.read(nullFilteringTypeAdapterFactorys.java:180) 位于org.jclouds.json.internal.nullFilteringTypeAdapterFactorys$SetTypeAdapter.read(nullFilteringTypeAdapterFactorys.java:166) 位于org.jclouds.json.internal.DeserializationConstructorAndReflectionTypeAdapterFactory$ParameterReader.read(DeserializationConstructorAndReflectionTypeAdapterFactory.java:272) 位于org.jclouds.json.int