From a489c8c5684ec5de2f5fc53359a4f1d0995e4024 Mon Sep 17 00:00:00 2001 From: Bill Burke Date: Thu, 23 Oct 2014 15:06:52 -0400 Subject: [PATCH] RESTEASY-1118 --- .../nextgen/resource/SetRequestUriTest.java | 37 +++++++++++++++++-- .../jboss/resteasy/spi/ResteasyUriInfo.java | 18 ++------- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/jaxrs/resteasy-jaxrs-testsuite/src/test/java/org/jboss/resteasy/test/nextgen/resource/SetRequestUriTest.java b/jaxrs/resteasy-jaxrs-testsuite/src/test/java/org/jboss/resteasy/test/nextgen/resource/SetRequestUriTest.java index 7296c84719f..92da356047a 100755 --- a/jaxrs/resteasy-jaxrs-testsuite/src/test/java/org/jboss/resteasy/test/nextgen/resource/SetRequestUriTest.java +++ b/jaxrs/resteasy-jaxrs-testsuite/src/test/java/org/jboss/resteasy/test/nextgen/resource/SetRequestUriTest.java @@ -77,9 +77,24 @@ else if (requestContext.getUriInfo().getPath().contains("setrequesturi1")) requestContext.setRequestUri( requestContext.getUriInfo().getRequestUriBuilder().path("uri").build()); } + else if (requestContext.getUriInfo().getPath().contains("setrequesturi2")) + { + requestContext.setRequestUri(URI.create("http://localhost:888/otherbase"), URI.create("http://xx.yy:888/base/resource/sub")); + UriInfo info = requestContext.getUriInfo(); + abortWithEntity(requestContext, info.getAbsolutePath().toASCIIString()); + + } + + } + protected void abortWithEntity(ContainerRequestContext requestContext, String entity) { + StringBuilder sb = new StringBuilder(); + sb.append(entity); + Response response = Response.ok(sb.toString()).build(); + requestContext.abortWith(response); } + } static Client client; @@ -119,10 +134,18 @@ public void testSchemaChange() { @Test public void testResolve() { - URI base = URI.create("http://localhost:888/otherbase"); - URI uri = URI.create("http://xx.yy:888/base/resource/sub"); + { + URI base = URI.create("http://localhost:888/otherbase"); + URI uri = URI.create("http://xx.yy:888/base/resource/sub?foo=bar"); + + System.out.println(base.resolve(uri)); + } + { + URI base = URI.create("https://localhost:888/base"); + URI uri = URI.create("https://localhost:888/base/resource/change"); - System.out.println(base.resolve(uri)); + System.out.println(base.resolve(uri)); + } } @@ -136,5 +159,13 @@ public void testUriOverride() Assert.assertEquals("OK", response.readEntity(String.class)); } + @Test + public void testUriOverride2() + { + Response response = client.target(generateURL("/base/resource/setrequesturi2")).request().get(); + Assert.assertEquals(200, response.getStatus()); + Assert.assertEquals("http://xx.yy:888/base/resource/sub", response.readEntity(String.class)); + + } } diff --git a/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/spi/ResteasyUriInfo.java b/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/spi/ResteasyUriInfo.java index 56cac7efe3c..08e817dd862 100755 --- a/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/spi/ResteasyUriInfo.java +++ b/jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/spi/ResteasyUriInfo.java @@ -102,21 +102,9 @@ public ResteasyUriInfo(URI base, URI relative) public void setUri(URI base, URI relative) { - String contextPath = base.getRawPath(); - String relativePath = relative.getRawPath(); - - if (relativePath.startsWith(contextPath)) - { - relativePath = relativePath.substring(contextPath.length()); - - } - else - { - relativePath = ""; - } - - String absoluteUri = UriBuilder.fromUri(base).path(relativePath).replaceQuery(null).toTemplate(); - initialize(absoluteUri, relative.getRawQuery(), contextPath); + URI rel = base.resolve(relative); + String absoluteUri = UriBuilder.fromUri(rel).replaceQuery(null).toTemplate(); + initialize(absoluteUri, rel.getRawQuery(), base.getRawPath()); } protected void processPath()