public static ServiceMetaBuilder serviceMetaBuilder() { return new ServiceMetaBuilder(); }
public void addMethods(final String path, final Collection<MethodAccess> methods) { /* Only add methods that could be REST endpoints. */ methods.stream().filter(methodAccess -> !methodAccess.isPrivate() && //No private methods !methodAccess.isStatic() && //No static methods !methodAccess.method().isSynthetic() && //No synthetic methods !methodAccess.method().getDeclaringClass().getName().contains("$$EnhancerByGuice$$") && !methodAccess.name().contains("$")) //No methods with $ as this could be Scala generated // method or byte code lib generated .forEach(methodAccess -> addMethod(path, methodAccess)); }
public ContextMetaBuilder addService(String alias, Class<?> serviceClass) { final ClassMeta<?> classMeta = ClassMeta.classMeta(serviceClass); String name = alias != null ? alias : getServiceName(classMeta); final List<String> requestPaths = getRequestPathsByAnnotated(classMeta, name); if (alias != null) { requestPaths.add(asPath(alias)); } final String description = getDescriptionFromRequestMapping(classMeta); final ServiceMetaBuilder serviceMetaBuilder = ServiceMetaBuilder.serviceMetaBuilder() .setRequestPaths(requestPaths).setName(name).setDescription(description) .setResponseHeaders(getResponseHeaders(classMeta)); serviceMetaBuilder.addMethods(this.getRootURI(), Lists.list(classMeta.methods())); addService(serviceMetaBuilder.build()); return this; }
public ServiceMeta build() { return new ServiceMeta(getName(), getRequestPaths(), getMethods(), getDescription()); }
@Test public void test() { final ClassMeta<?> classMeta = ClassMeta.classMeta(Foo.class); ServiceMetaBuilder serviceMetaBuilder = new ServiceMetaBuilder().setRequestPaths(Lists.list("foo")); serviceMetaBuilder.addMethods("foo", Lists.list(classMeta.methods())); final Map<String, ServiceMethodMeta> serviceMethodMetaMap = Maps.toMap("name", serviceMetaBuilder.getMethods()); final ServiceMethodMeta serviceMethodMeta = serviceMethodMetaMap.get("foo"); assertEquals(int.class, serviceMethodMeta.getReturnType()); final RequestMeta requestMeta = serviceMethodMeta.getRequestEndpoints().get(0); assertEquals("/foo", requestMeta.getRequestURI()); }
@Test public void testBuildNestedBuilder() throws Exception { contextMetaBuilder.setRootURI(contextMetaBuilder.getRootURI() + "Engine"); contextMetaBuilder.addService( serviceMetaBuilder() .setName("myService") .addRequestPath("/myservice") .addMethod(method("hello", getRequest( "/callme/", stringParam( headParam("foobarHeader") ), intParam( requestParam("helloMom") ), doubleParam( pathParam("score", 9) ) ) )) .build()); contextMetaBuilder.setServices(contextMetaBuilder.getServices()); ContextMeta context = contextMetaBuilder.build(); assertEquals("hello", context.getServices().get(0).getMethods().get(0).getName()); assertEquals("/callme/", context.getServices() .get(0).getMethods().get(0).getRequestEndpoints().get(0).getRequestURI()); }
public ServiceMetaBuilder addMethod(final String rootPath, final MethodAccess methodAccess) { for (String servicePath : this.getRequestPaths()) { final MultiMap<String, String> responseHeaders = getResponseHeaders(methodAccess); serviceMethodMetaBuilder.addRequestEndpoint(requestMetaBuilder.build()); addMethod(serviceMethodMetaBuilder.build());
@Test public void shouldReturnBodyParamForParamWithoutQBitAnnotations() { final ClassMeta<?> classMeta = ClassMeta.classMeta(Foo.class); ServiceMetaBuilder serviceMetaBuilder = new ServiceMetaBuilder().setRequestPaths(Lists.list("foo")); serviceMetaBuilder.addMethods("foo", Lists.list(classMeta.methods())); ServiceMethodMeta serviceMethodMeta = Lists.filterBy(serviceMetaBuilder.getMethods(), new Predicate<ServiceMethodMeta>() { @Override public boolean test(ServiceMethodMeta serviceMethodMeta) { return "otherAnnotation".equals(serviceMethodMeta.getName()); } }).iterator().next(); assertTrue(serviceMethodMeta.getRequestEndpoints().iterator().hasNext()); assertTrue(serviceMethodMeta.getRequestEndpoints().iterator().next() .getParameters().iterator().hasNext()); assertTrue(serviceMethodMeta.getRequestEndpoints().iterator().next() .getParameters().iterator().next() .getParam() instanceof BodyParam); }
@Test public void testBuildNestedBuilder2() throws Exception { contextMetaBuilder.setRootURI(contextMetaBuilder.getRootURI() + "Engine"); contextMetaBuilder.addService( serviceMetaBuilder() .setName("myService") .addRequestPath("/myservice") .addMethod( serviceMethodMetaBuilder().setName("hello") .addRequestEndpoint(getRequest( "/callme/", stringParam( headParam("foobarHeader") ), intParam( requestParam("helloMom") ), doubleParam( pathParam("score", 9) ) )).build() ) .build()); contextMetaBuilder.setServices(contextMetaBuilder.getServices()); ContextMeta context = contextMetaBuilder.build(); assertEquals("hello", context.getServices().get(0).getMethods().get(0).getName()); assertEquals("/callme/", context.getServices() .get(0).getMethods().get(0).getRequestEndpoints().get(0).getRequestURI()); }
public ServiceMeta build() { return new ServiceMeta(getName(), getRequestPaths(), getMethods(), getDescription()); }
public ServiceMetaBuilder addMethod(final String rootPath, final MethodAccess methodAccess) { for (String servicePath : this.getRequestPaths()) { final MultiMap<String, String> responseHeaders = getResponseHeaders(methodAccess); serviceMethodMetaBuilder.addRequestEndpoint(requestMetaBuilder.build()); addMethod(serviceMethodMetaBuilder.build());
public ContextMetaBuilder addService(final Class<?> serviceClass) { final ClassMeta<?> classMeta = ClassMeta.classMeta(serviceClass); String name = getServiceName(classMeta); final List<String> requestPaths = getRequestPathsByAnnotated(classMeta, name); final String description = getDescriptionFromRequestMapping(classMeta); final ServiceMetaBuilder serviceMetaBuilder = ServiceMetaBuilder.serviceMetaBuilder() .setRequestPaths(requestPaths).setName(name).setDescription(description) .setResponseHeaders(getResponseHeaders(classMeta)); serviceMetaBuilder.addMethods(this.getRootURI(), Lists.list(classMeta.methods())); addService(serviceMetaBuilder.build()); return this; }
@Test public void testRequestHeader() { final ClassMeta<?> classMeta = ClassMeta.classMeta(Foo.class); ServiceMetaBuilder serviceMetaBuilder = new ServiceMetaBuilder().setRequestPaths(Lists.list("foo")); serviceMetaBuilder.addMethods("/foo", Lists.list(classMeta.methods())); final Map<String, ServiceMethodMeta> serviceMethodMetaMap = Maps.toMap("name", serviceMetaBuilder.getMethods()); final ServiceMethodMeta serviceMethodMeta = serviceMethodMetaMap.get("methodWithHeaders"); final RequestMeta requestMeta = serviceMethodMeta.getRequestEndpoints().get(0); assertEquals("/headers", requestMeta.getRequestURI()); assertTrue(requestMeta.hasResponseHeaders()); MultiMap<String, String> headers = requestMeta.getResponseHeaders(); assertEquals(1, headers.size()); assertEquals("BAR", headers.getFirst("FOO")); }
@Test public void testBuildNestedBuilder3() throws Exception { contextMetaBuilder.setRootURI(contextMetaBuilder.getRootURI() + "Engine"); contextMetaBuilder.addService( serviceMetaBuilder() .setName("myService") .addRequestPath("/myservice") .addMethod( serviceMethodMetaBuilder().setName("hello") .addRequestEndpoint( requestMetaBuilder().setRequestURI("/callme/").addParameters( stringParam( headParam("foobarHeader") ), intParam( requestParam("helloMom") ), doubleParam( pathParam("score", 9) ) ).build() ).build() ) .build()); contextMetaBuilder.setServices(contextMetaBuilder.getServices()); ContextMeta context = contextMetaBuilder.build(); assertEquals("hello", context.getServices().get(0).getMethods().get(0).getName()); assertEquals("/callme/", context.getServices() .get(0).getMethods().get(0).getRequestEndpoints().get(0).getRequestURI()); }
public ServiceMeta build() { return new ServiceMeta(getName(), getRequestPaths(), getMethods(), getDescription()); }
public ServiceMetaBuilder addMethod(final String rootPath, final MethodAccess methodAccess) { for (String servicePath : this.getRequestPaths()) { final List<String> requestPaths = getRequestPathsByAnnotated(methodAccess, methodAccess.name().toLowerCase()); final String description = getDescriptionFromRequestMapping(methodAccess); final String returnDescription = getReturnDescriptionFromRequestMapping(methodAccess); final String summary = getSummaryFromRequestMapping(methodAccess); final int code = getCodeFromRequestMapping(methodAccess); final String contentType = getContentTypeFromRequestMapping(methodAccess); final MultiMap<String, String> responseHeaders = getResponseHeaders(methodAccess); final List<RequestMethod> requestMethods = getRequestMethodsByAnnotated(methodAccess); final ServiceMethodMetaBuilder serviceMethodMetaBuilder = ServiceMethodMetaBuilder.serviceMethodMetaBuilder(); serviceMethodMetaBuilder.setMethodAccess(methodAccess); serviceMethodMetaBuilder.setDescription(description); serviceMethodMetaBuilder.setSummary(summary); serviceMethodMetaBuilder.setReturnDescription(returnDescription); serviceMethodMetaBuilder.setResponseCode(code); serviceMethodMetaBuilder.setContentType(contentType); for (String path : requestPaths) { CallType callType = path.contains("{") ? CallType.ADDRESS_WITH_PATH_PARAMS : CallType.ADDRESS; final RequestMetaBuilder requestMetaBuilder = new RequestMetaBuilder(); requestMetaBuilder.setResponseHeaders(responseHeaders); requestMetaBuilder.addParameters(rootPath, servicePath, path, methodAccess); requestMetaBuilder.setCallType(callType).setRequestURI(path).setRequestMethods(requestMethods); serviceMethodMetaBuilder.addRequestEndpoint(requestMetaBuilder.build()); } addMethod(serviceMethodMetaBuilder.build()); } return this; }
public void addMethods(final String path, final Collection<MethodAccess> methods) { /* Only add methods that could be REST endpoints. */ methods.stream().filter(methodAccess -> !methodAccess.isPrivate() && //No private methods !methodAccess.isStatic() && //No static methods !methodAccess.method().isSynthetic() && //No synthetic methods !methodAccess.method().getDeclaringClass().getName().contains("$$EnhancerByGuice$$") && !methodAccess.name().contains("$")) //No methods with $ as this could be Scala generated // method or byte code lib generated .forEach(methodAccess -> addMethod(path, methodAccess)); }
public static ServiceMetaBuilder serviceMetaBuilder() { return new ServiceMetaBuilder(); }
public ContextMetaBuilder addService(String alias, Class<?> serviceClass) { final ClassMeta<?> classMeta = ClassMeta.classMeta(serviceClass); String name = alias != null ? alias : getServiceName(classMeta); final List<String> requestPaths = getRequestPathsByAnnotated(classMeta, name); if (alias != null) { requestPaths.add(asPath(alias)); } final String description = getDescriptionFromRequestMapping(classMeta); final ServiceMetaBuilder serviceMetaBuilder = ServiceMetaBuilder.serviceMetaBuilder() .setRequestPaths(requestPaths).setName(name).setDescription(description) .setResponseHeaders(getResponseHeaders(classMeta)); serviceMetaBuilder.addMethods(this.getRootURI(), Lists.list(classMeta.methods())); addService(serviceMetaBuilder.build()); return this; }
@Test public void testNoCacheWithGet() { final ClassMeta<?> classMeta = ClassMeta.classMeta(Foo.class); ServiceMetaBuilder serviceMetaBuilder = new ServiceMetaBuilder().setRequestPaths(Lists.list("foo")); serviceMetaBuilder.addMethods("/foo", Lists.list(classMeta.methods())); final Map<String, ServiceMethodMeta> serviceMethodMetaMap = Maps.toMap("name", serviceMetaBuilder.getMethods()); final ServiceMethodMeta serviceMethodMeta = serviceMethodMetaMap.get("getNoCache"); final RequestMeta requestMeta = serviceMethodMeta.getRequestEndpoints().get(0); assertEquals("/nocache", requestMeta.getRequestURI()); assertTrue(requestMeta.hasResponseHeaders()); MultiMap<String, String> headers = requestMeta.getResponseHeaders(); assertEquals(1, headers.size()); final List<String> controls = (List<String>) headers.getAll(HttpHeaders.CACHE_CONTROL); assertEquals("max-age=0", controls.get(0)); assertEquals("no-cache, no-store", controls.get(1)); }