JCLOUDS-1443: fix(rest/processor): check if `/` is ending a default endpoint
diff --git a/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java b/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java
index 8fdbb43..352e032 100644
--- a/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java
+++ b/core/src/main/java/org/jclouds/rest/internal/RestAnnotationProcessor.java
@@ -573,7 +573,9 @@
return null;
if (original.getHost() != null)
return original;
- return withHost.resolve(original);
+ String host = withHost.toString();
+ URI baseURI = host.endsWith("/") ? withHost : URI.create(host + "/");
+ return baseURI.resolve(original);
}
private org.jclouds.rest.MapBinder getMapPayloadBinderOrNull(Invocation invocation) {
diff --git a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
index 73355ad..e2d7eb2 100644
--- a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
+++ b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
@@ -2679,6 +2679,13 @@
assertEquals(new URI("http://foo/bar"), result);
}
+ @Test
+ public void testComplexHost() throws Exception {
+ URI result = RestAnnotationProcessor.addHostIfMissing(new URI("bar"), new URI("http://foo/foobar"));
+ assertEquals(new URI("http://foo/foobar/bar"), result);
+ }
+
+
DateService dateService = new SimpleDateFormatDateService();
RestAnnotationProcessor processor;
TransformerForRequest transformer;