Skip to content

Commit

Permalink
Always Use Enable BeanParam Support
Browse files Browse the repository at this point in the history
  • Loading branch information
JKomoroski committed Feb 16, 2023
1 parent b866ffe commit 9f5b484
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 110 deletions.
11 changes: 0 additions & 11 deletions jaxrs2/src/main/java/feign/jaxrs2/JAXRS2Contract.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,25 +27,14 @@
*/
public final class JAXRS2Contract extends JAXRSContract {

private final boolean enableBeanParamSupport;

public JAXRS2Contract() {
this(false);
}

public JAXRS2Contract(boolean enableBeanParamSupport) {
this.enableBeanParamSupport = enableBeanParamSupport;
// parameter with unsupported jax-rs annotations should not be passed as body params.
// this will prevent interfaces from becoming unusable entirely due to single (unsupported)
// endpoints.
// https://github.com/OpenFeign/feign/issues/669
super.registerParameterAnnotation(Suspended.class, (ann, data, i) -> data.ignoreParamater(i));
super.registerParameterAnnotation(Context.class, (ann, data, i) -> data.ignoreParamater(i));

if (!enableBeanParamSupport) {
super.registerParameterAnnotation(BeanParam.class, (ann, data, i) -> data.ignoreParamater(i));
}

}

@Override
Expand Down
60 changes: 53 additions & 7 deletions jaxrs2/src/test/java/feign/jaxrs2/JAXRS2ContractTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,20 @@
*/
package feign.jaxrs2;

import static feign.assertj.FeignAssertions.assertThat;
import org.assertj.core.data.MapEntry;
import feign.MethodMetadata;
import feign.jaxrs.JAXRSContract;
import feign.jaxrs.JAXRSContractTest;
import feign.jaxrs2.JAXRS2ContractTest.Jaxrs2BeanParamInternals.BeanParamInput;
import feign.jaxrs2.JAXRS2ContractTest.Jaxrs2Internals.Input;
import org.junit.Test;
import javax.ws.rs.*;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import feign.MethodMetadata;
import feign.jaxrs.JAXRSContract;
import feign.jaxrs.JAXRSContractTest;
import feign.jaxrs2.JAXRS2ContractTest.Jaxrs2Internals.Input;
import static feign.assertj.FeignAssertions.assertThat;
import static java.util.Arrays.asList;
import static org.assertj.core.data.MapEntry.entry;

/**
* Tests interfaces defined per {@link JAXRS2Contract} are interpreted into expected
Expand All @@ -47,13 +49,57 @@ public void injectJaxrsInternals() throws Exception {
}

@Test
public void injectBeanParam() throws Exception {
public void injectWithoutBeanParam() throws Exception {
final MethodMetadata methodMetadata =
parseAndValidateMetadata(Jaxrs2Internals.class, "beanParameters", Input.class);
assertThat(methodMetadata.template())
.noRequestBody();
}

@Test
public void injectBeanParam() throws Exception {
final MethodMetadata methodMetadata =
parseAndValidateMetadata(Jaxrs2BeanParamInternals.class, "beanParameters",
BeanParamInput.class);
assertThat(methodMetadata.template())
.noRequestBody();

assertThat(methodMetadata.template())
.hasHeaders(entry("X-Custom-Header", asList("{X-Custom-Header}")));
assertThat(methodMetadata.template())
.hasQueries(entry("query", asList("{query}")));
assertThat(methodMetadata.formParams())
.isNotEmpty()
.containsExactly("form");

}

public interface Jaxrs2BeanParamInternals {
@GET
@Path("/")
void inject(@Suspended AsyncResponse ar, @Context UriInfo info);

@Path("/{path}")
@POST
void beanParameters(@BeanParam BeanParamInput beanParam);

public class BeanParamInput {

@PathParam("path")
String path;

@QueryParam("query")
String query;

@FormParam("form")
String form;

@HeaderParam("X-Custom-Header")
String header;

}
}


@Path("/")
public interface Jaxrs2Internals {
Expand Down

This file was deleted.

0 comments on commit 9f5b484

Please sign in to comment.