Search in sources :

Example 1 with ServiceHttpEndpoint

use of io.cdap.cdap.api.service.http.ServiceHttpEndpoint in project cdap by caskdata.

the class GetServiceEndpointsCommand method perform.

@Override
public void perform(Arguments arguments, PrintStream output) throws Exception {
    ServiceId serviceId = new ServiceId(parseProgramId(arguments, ElementType.SERVICE));
    List<ServiceHttpEndpoint> endpoints = serviceClient.getEndpoints(serviceId);
    Table table = Table.builder().setHeader("method", "path").setRows(endpoints, new RowMaker<ServiceHttpEndpoint>() {

        @Override
        public List<?> makeRow(ServiceHttpEndpoint endpoint) {
            return Lists.newArrayList(endpoint.getMethod(), endpoint.getPath());
        }
    }).build();
    cliConfig.getTableRenderer().render(cliConfig, output, table);
}
Also used : ServiceHttpEndpoint(io.cdap.cdap.api.service.http.ServiceHttpEndpoint) Table(io.cdap.cdap.cli.util.table.Table) RowMaker(io.cdap.cdap.cli.util.RowMaker) ServiceId(io.cdap.cdap.proto.id.ServiceId)

Example 2 with ServiceHttpEndpoint

use of io.cdap.cdap.api.service.http.ServiceHttpEndpoint in project cdap by caskdata.

the class DefaultHttpServiceHandlerConfigurer method createSpecification.

/**
 * Creates a {@link HttpServiceHandlerSpecification} from the parameters stored in this class.
 *
 * @return a new specification from the parameters stored in this instance
 */
public HttpServiceHandlerSpecification createSpecification() {
    List<ServiceHttpEndpoint> endpoints = new ArrayList<>();
    // Inspect the handler to grab all @UseDataset, @Property and endpoints.
    Reflections.visit(handler, handler.getClass(), new DataSetFieldExtractor(datasets), new PropertyFieldExtractor(properties), new ServiceEndpointExtractor(endpoints));
    return new HttpServiceHandlerSpecification(handler.getClass().getName(), name, "", properties, datasets, endpoints);
}
Also used : ServiceHttpEndpoint(io.cdap.cdap.api.service.http.ServiceHttpEndpoint) ArrayList(java.util.ArrayList) DataSetFieldExtractor(io.cdap.cdap.internal.specification.DataSetFieldExtractor) PropertyFieldExtractor(io.cdap.cdap.internal.specification.PropertyFieldExtractor) HttpServiceHandlerSpecification(io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification)

Example 3 with ServiceHttpEndpoint

use of io.cdap.cdap.api.service.http.ServiceHttpEndpoint in project cdap by caskdata.

the class ServiceClientTestRun method testGetEndpoints.

@Test
public void testGetEndpoints() throws Exception {
    List<ServiceHttpEndpoint> endpoints = serviceClient.getEndpoints(service);
    assertEquals(1, endpoints.size());
    ServiceHttpEndpoint endpoint = endpoints.get(0);
    assertEquals("GET", endpoint.getMethod());
    assertEquals("/ping", endpoint.getPath());
}
Also used : ServiceHttpEndpoint(io.cdap.cdap.api.service.http.ServiceHttpEndpoint) Test(org.junit.Test)

Example 4 with ServiceHttpEndpoint

use of io.cdap.cdap.api.service.http.ServiceHttpEndpoint in project cdap by caskdata.

the class ServiceEndpointExtractor method visit.

@Override
public void visit(Object instance, Type inspectType, Type declareType, Method method) throws Exception {
    if (!Modifier.isPublic(method.getModifiers())) {
        return;
    }
    Path classPathAnnotation = TypeToken.of(inspectType).getRawType().getAnnotation(Path.class);
    Path methodPathAnnotation = method.getAnnotation(Path.class);
    if (methodPathAnnotation == null && classPathAnnotation == null) {
        return;
    }
    // Find one or more request type annotations present on the method.
    Set<Class<? extends Annotation>> acceptedMethodTypes = ImmutableSet.of(GET.class, POST.class, DELETE.class, PUT.class, OPTIONS.class, HEAD.class);
    Set<Class<? extends Annotation>> methodAnnotations = Sets.newHashSet();
    for (Annotation annotation : method.getAnnotations()) {
        Class<? extends Annotation> annotationClz = annotation.annotationType();
        if (acceptedMethodTypes.contains(annotationClz)) {
            methodAnnotations.add(annotationClz);
        }
    }
    for (Class<? extends Annotation> methodTypeClz : methodAnnotations) {
        String methodType = methodTypeClz.getAnnotation(HttpMethod.class).value();
        String endpoint = "/";
        endpoint = classPathAnnotation == null ? endpoint : endpoint + classPathAnnotation.value();
        endpoint = methodPathAnnotation == null ? endpoint : endpoint + "/" + methodPathAnnotation.value();
        // Replace consecutive instances of / with a single instance.
        endpoint = endpoint.replaceAll("/+", "/");
        endpoints.add(new ServiceHttpEndpoint(methodType, endpoint));
    }
}
Also used : Path(javax.ws.rs.Path) ServiceHttpEndpoint(io.cdap.cdap.api.service.http.ServiceHttpEndpoint) Annotation(java.lang.annotation.Annotation) HttpMethod(javax.ws.rs.HttpMethod)

Example 5 with ServiceHttpEndpoint

use of io.cdap.cdap.api.service.http.ServiceHttpEndpoint in project cdap by caskdata.

the class ProgramLifecycleHttpHandlerTest method testServiceSpecification.

@Test
public void testServiceSpecification() throws Exception {
    deploy(AppWithServices.class, 200);
    HttpResponse response = doGet("/v3/namespaces/default/apps/AppWithServices/services/NoOpService");
    Assert.assertEquals(200, response.getResponseCode());
    Set<ServiceHttpEndpoint> expectedEndpoints = ImmutableSet.of(new ServiceHttpEndpoint("GET", "/ping"), new ServiceHttpEndpoint("POST", "/multi"), new ServiceHttpEndpoint("GET", "/multi"), new ServiceHttpEndpoint("GET", "/multi/ping"));
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeAdapter(ServiceSpecification.class, new ServiceSpecificationCodec());
    Gson gson = gsonBuilder.create();
    ServiceSpecification specification = readResponse(response, ServiceSpecification.class, gson);
    Set<ServiceHttpEndpoint> returnedEndpoints = new HashSet<>();
    for (HttpServiceHandlerSpecification httpServiceHandlerSpecification : specification.getHandlers().values()) {
        returnedEndpoints.addAll(httpServiceHandlerSpecification.getEndpoints());
    }
    Assert.assertEquals("NoOpService", specification.getName());
    Assert.assertEquals(returnedEndpoints, expectedEndpoints);
}
Also used : ServiceHttpEndpoint(io.cdap.cdap.api.service.http.ServiceHttpEndpoint) ServiceSpecificationCodec(io.cdap.cdap.internal.app.ServiceSpecificationCodec) ServiceSpecification(io.cdap.cdap.api.service.ServiceSpecification) GsonBuilder(com.google.gson.GsonBuilder) HttpResponse(io.cdap.common.http.HttpResponse) Gson(com.google.gson.Gson) HttpServiceHandlerSpecification(io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification) HashSet(java.util.HashSet) Test(org.junit.Test)

Aggregations

ServiceHttpEndpoint (io.cdap.cdap.api.service.http.ServiceHttpEndpoint)6 HttpServiceHandlerSpecification (io.cdap.cdap.api.service.http.HttpServiceHandlerSpecification)3 ServiceSpecification (io.cdap.cdap.api.service.ServiceSpecification)2 Test (org.junit.Test)2 ImmutableList (com.google.common.collect.ImmutableList)1 Gson (com.google.gson.Gson)1 GsonBuilder (com.google.gson.GsonBuilder)1 RowMaker (io.cdap.cdap.cli.util.RowMaker)1 Table (io.cdap.cdap.cli.util.table.Table)1 ServiceSpecificationCodec (io.cdap.cdap.internal.app.ServiceSpecificationCodec)1 DataSetFieldExtractor (io.cdap.cdap.internal.specification.DataSetFieldExtractor)1 PropertyFieldExtractor (io.cdap.cdap.internal.specification.PropertyFieldExtractor)1 ServiceId (io.cdap.cdap.proto.id.ServiceId)1 HttpResponse (io.cdap.common.http.HttpResponse)1 Annotation (java.lang.annotation.Annotation)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 HttpMethod (javax.ws.rs.HttpMethod)1 Path (javax.ws.rs.Path)1