use of com.palantir.dialogue.Endpoint in project conjure-java by palantir.
the class DialogueInterfaceGenerator method apiMethod.
private MethodSpec apiMethod(EndpointDefinition endpointDef, Function<Optional<Type>, TypeName> returnTypeMapper) {
MethodSpec.Builder methodBuilder = MethodSpec.methodBuilder(endpointDef.getEndpointName().get()).addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT).addParameters(parameterTypes.interfaceMethodParams(endpointDef)).addAnnotations(ConjureAnnotations.getClientEndpointAnnotations(endpointDef));
endpointDef.getMarkers().stream().filter(marker -> !marker.accept(IsUndertowAsyncMarkerVisitor.INSTANCE)).map(marker -> {
Preconditions.checkState(marker.accept(TypeVisitor.IS_REFERENCE), "Endpoint marker must be a reference type", SafeArg.of("marker", marker));
return marker.accept(TypeVisitor.REFERENCE);
}).forEach(referenceType -> methodBuilder.addAnnotation(ClassName.get(referenceType.getPackage(), referenceType.getName())));
endpointDef.getDeprecated().ifPresent(deprecatedDocsValue -> methodBuilder.addAnnotation(Deprecated.class));
methodBuilder.addJavadoc("$L", ServiceGenerators.getJavaDocWithRequestLine(endpointDef));
TypeName returnType = returnTypeMapper.apply(endpointDef.getReturns());
methodBuilder.returns(returnType);
if (TypeName.get(InputStream.class).equals(returnType)) {
methodBuilder.addAnnotation(MustBeClosed.class);
}
return methodBuilder.build();
}
use of com.palantir.dialogue.Endpoint in project conjure-java-runtime by palantir.
the class JaxRsClientDialogueEndpointTest method testSlashPathParameter.
@Test
public void testSlashPathParameter() {
Channel channel = stubNoContentResponseChannel();
StubService service = JaxRsClient.create(StubService.class, channel, runtime);
service.innerPath("/");
ArgumentCaptor<Endpoint> endpointCaptor = ArgumentCaptor.forClass(Endpoint.class);
ArgumentCaptor<Request> requestCaptor = ArgumentCaptor.forClass(Request.class);
verify(channel).execute(endpointCaptor.capture(), requestCaptor.capture());
UrlBuilder urlBuilder = mock(UrlBuilder.class);
endpointCaptor.getValue().renderPath(ImmutableMap.of(), urlBuilder);
// context path
verify(urlBuilder).pathSegment("foo");
// encoded into %2F by DefaultUrlBuilder
verify(urlBuilder).pathSegment("/");
}
use of com.palantir.dialogue.Endpoint in project conjure-java-runtime by palantir.
the class JaxRsClientDialogueEndpointTest method testEndpoint.
@Test
public void testEndpoint() {
Channel channel = stubNoContentResponseChannel();
StubService service = JaxRsClient.create(StubService.class, channel, runtime);
service.ping();
ArgumentCaptor<Endpoint> endpointCaptor = ArgumentCaptor.forClass(Endpoint.class);
ArgumentCaptor<Request> requestCaptor = ArgumentCaptor.forClass(Request.class);
verify(channel).execute(endpointCaptor.capture(), requestCaptor.capture());
Endpoint endpoint = endpointCaptor.getValue();
assertThat(endpoint.serviceName()).isEqualTo("StubService");
assertThat(endpoint.endpointName()).isEqualTo("ping");
assertThat(endpoint.httpMethod()).isEqualTo(HttpMethod.GET);
Request request = requestCaptor.getValue();
assertThat(request.body()).isEmpty();
assertThat(request.headerParams().asMap()).containsExactly(new AbstractMap.SimpleImmutableEntry<>("Accept", ImmutableList.of("application/json")));
}
use of com.palantir.dialogue.Endpoint in project conjure-java-runtime by palantir.
the class JaxRsClientDialogueEndpointTest method testTrailingWildcardParameter_slashes.
@Test
public void testTrailingWildcardParameter_slashes() {
Channel channel = stubNoContentResponseChannel();
StubService service = JaxRsClient.create(StubService.class, channel, runtime);
service.complexPath("dynamic0", "dynamic1/dynamic2");
ArgumentCaptor<Endpoint> endpointCaptor = ArgumentCaptor.forClass(Endpoint.class);
ArgumentCaptor<Request> requestCaptor = ArgumentCaptor.forClass(Request.class);
verify(channel).execute(endpointCaptor.capture(), requestCaptor.capture());
UrlBuilder urlBuilder = mock(UrlBuilder.class);
endpointCaptor.getValue().renderPath(ImmutableMap.of(), urlBuilder);
// context path
verify(urlBuilder).pathSegment("foo");
verify(urlBuilder).pathSegment("static0");
verify(urlBuilder).pathSegment("dynamic0");
verify(urlBuilder).pathSegment("static1");
// Value should not be split into multiple segments
verify(urlBuilder).pathSegment("dynamic1/dynamic2");
}
use of com.palantir.dialogue.Endpoint in project conjure-java-runtime by palantir.
the class JaxRsClientDialogueEndpointTest method testQueryParameterCollection.
@Test
public void testQueryParameterCollection() {
Channel channel = stubNoContentResponseChannel();
StubService service = JaxRsClient.create(StubService.class, channel, runtime);
service.collectionOfQueryParams(ImmutableList.of("a", "/", "", "a b", "a+b"));
ArgumentCaptor<Endpoint> endpointCaptor = ArgumentCaptor.forClass(Endpoint.class);
ArgumentCaptor<Request> requestCaptor = ArgumentCaptor.forClass(Request.class);
verify(channel).execute(endpointCaptor.capture(), requestCaptor.capture());
UrlBuilder urlBuilder = mock(UrlBuilder.class);
endpointCaptor.getValue().renderPath(ImmutableMap.of(), urlBuilder);
verify(urlBuilder).queryParam("query", "a");
verify(urlBuilder).queryParam("query", "/");
verify(urlBuilder).queryParam("query", "");
verify(urlBuilder).queryParam("query", "a b");
verify(urlBuilder).queryParam("query", "a+b");
}
Aggregations