Browse Source

Merge pull request #295 from dstepanov/jaxrs-npe-method-annotation-order

JAX-RS: Fix NPE when @Path is first on a method and without leading slash
pull/302/head
Adrian Cole 9 years ago
parent
commit
b2e9b6f00e
  1. 2
      jaxrs/src/main/java/feign/jaxrs/JAXRSContract.java
  2. 13
      jaxrs/src/test/java/feign/jaxrs/JAXRSContractTest.java

2
jaxrs/src/main/java/feign/jaxrs/JAXRSContract.java

@ -90,7 +90,7 @@ public final class JAXRSContract extends Contract.BaseContract { @@ -90,7 +90,7 @@ public final class JAXRSContract extends Contract.BaseContract {
String pathValue = emptyToNull(Path.class.cast(methodAnnotation).value());
checkState(pathValue != null, "Path.value() was empty on method %s", method.getName());
String methodAnnotationValue = Path.class.cast(methodAnnotation).value();
if (!methodAnnotationValue.startsWith("/") && !data.template().toString().endsWith("/")) {
if (!methodAnnotationValue.startsWith("/") && !data.template().url().endsWith("/")) {
methodAnnotationValue = "/" + methodAnnotationValue;
}
// jax-rs allows whitespace around the param name, as well as an optional regex. The contract should

13
jaxrs/src/test/java/feign/jaxrs/JAXRSContractTest.java

@ -361,6 +361,12 @@ public class JAXRSContractTest { @@ -361,6 +361,12 @@ public class JAXRSContractTest {
.hasUrl("/base/specific");
}
@Test
public void methodPathWithoutLeadingSlashParsesCorrectly() throws Exception {
assertThat(parseAndValidateMetadata(MethodWithFirstPathThenGetWithoutLeadingSlash.class, "get").template())
.hasUrl("/base/specific");
}
interface Methods {
@POST
@ -568,6 +574,13 @@ public class JAXRSContractTest { @@ -568,6 +574,13 @@ public class JAXRSContractTest {
Response get();
}
@Path("/base/")
interface MethodWithFirstPathThenGetWithoutLeadingSlash {
@Path("specific")
@GET
Response get();
}
private MethodMetadata parseAndValidateMetadata(Class<?> targetType, String method,
Class<?>... parameterTypes)
throws NoSuchMethodException {

Loading…
Cancel
Save