private void readMethodMetaData() { final Iterable<MethodAccess> methods = classMeta.methods(); for (MethodAccess methodAccess : methods) { registerMethod(methodAccess); } addresses.addAll(methodMap.keySet()); }
private static boolean hasQueueCallbackAnnotations(Object service) { @SuppressWarnings("unchecked") ClassMeta<Class<?>> classMeta = (ClassMeta<Class<?>>) ClassMeta.classMeta(service.getClass()); final Iterable<MethodAccess> methods = classMeta.methods(); for (MethodAccess methodAccess : methods) { if (methodAccess.hasAnnotation(QUEUE_CALLBACK_ANNOTATION_NAME)) { return true; } } return false; } }
@Override public void stopListening(Object listener) { final ClassMeta<?> classMeta = ClassMeta.classMeta(listener.getClass()); final Iterable<MethodAccess> methods = classMeta.methods(); for (final MethodAccess methodAccess : methods) { final AnnotationData listen = getListenAnnotation(methodAccess); if (listen == null) continue; stopListeningToMethodEventListeners(listener, methodAccess, listen); } }
public AnnotationDrivenQueueCallbackHandler(Object service) { ClassMeta<Class<?>> classMeta; //noinspection unchecked classMeta = (ClassMeta<Class<?>>) ClassMeta.classMeta(service.getClass()); this.service = service; final Iterable<MethodAccess> methods = classMeta.methods(); for (MethodAccess methodAccess : methods) { if (methodAccess.hasAnnotation(QUEUE_CALLBACK_ANNOTATION_NAME)) { processAnnotationForMethod(methodAccess); } } }
public ServiceBuilder setServiceObject(final Object serviceObject) { if (serviceObject == null) { throw new IllegalArgumentException("ServiceBuilder setServiceObject:: serviceObject cant be null"); } ClassMeta<?> classMeta = ClassMeta.classMeta(serviceObject.getClass()); Iterable<MethodAccess> methods = classMeta.methods(); Set<String> methodNames = new HashSet<>(); for (MethodAccess methodAccess : methods) { if (methodAccess.isPrivate() || methodAccess.method().getDeclaringClass().getName().contains("$$EnhancerByGuice$$")) { continue; } if (methodNames.contains(methodAccess.name())) { logger.error("QBit does not support method overloading methods in Service Queues" + " problem name " + methodAccess.name() + " is overloaded " + methodNames + " from class " + classMeta.longName()); } else { methodNames.add(methodAccess.name()); } } this.serviceObject = serviceObject; return this; }
private <T> Map<String, String> createMethodToChannelMap(final String channelPrefix, final Class<T> eventBusProxyInterface) { final Map<String, String> methodToChannelMap = new ConcurrentHashMap<>(20); final ClassMeta<T> classMeta = classMeta(eventBusProxyInterface); final AnnotationData classAnnotation = classMeta.annotation(AnnotationUtils.EVENT_CHANNEL_ANNOTATION_NAME); final String classEventBusName = AnnotationUtils.getClassEventChannelName(classMeta, classAnnotation); classMeta.methods().forEach(methodAccess -> { AnnotationData methodAnnotation = methodAccess.annotation(AnnotationUtils.EVENT_CHANNEL_ANNOTATION_NAME); String methodEventBusName = methodAnnotation != null && methodAnnotation.getValues().get("value") != null ? methodAnnotation.getValues().get("value").toString() : null; if (Str.isEmpty(methodEventBusName)) { methodEventBusName = methodAccess.name(); } final String channelName = createChannelName(channelPrefix, classEventBusName, methodEventBusName); methodToChannelMap.put(methodAccess.method().toString(), channelName); }); return methodToChannelMap; }
@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); }
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 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 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)); }
@Test public void testNoCache() { 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("noCache"); 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)); }
@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 testManyRequestHeaders() { 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("methodWithManyHeaders"); final RequestMeta requestMeta = serviceMethodMeta.getRequestEndpoints().get(0); assertEquals("/manyheaders", requestMeta.getRequestURI()); assertTrue(requestMeta.hasResponseHeaders()); MultiMap<String, String> headers = requestMeta.getResponseHeaders(); assertEquals(2, headers.size()); assertEquals("BAR", headers.getFirst("FOO")); assertEquals("BAZ", headers.getFirst("BAR")); }
private static boolean hasQueueCallbackAnnotations(Object service) { @SuppressWarnings("unchecked") ClassMeta<Class<?>> classMeta = (ClassMeta<Class<?>>) ClassMeta.classMeta(service.getClass()); final Iterable<MethodAccess> methods = classMeta.methods(); for (MethodAccess methodAccess : methods) { if (methodAccess.hasAnnotation(QUEUE_CALLBACK_ANNOTATION_NAME)) { return true; } } return false; } }
private static boolean hasQueueCallbackAnnotations(Object service) { @SuppressWarnings("unchecked") ClassMeta<Class<?>> classMeta = (ClassMeta<Class<?>>) ClassMeta.classMeta(service.getClass()); final Iterable<MethodAccess> methods = classMeta.methods(); for (MethodAccess methodAccess : methods) { if (methodAccess.hasAnnotation(QUEUE_CALLBACK_ANNOTATION_NAME)) { return true; } } return false; } }
@Override public void stopListening(Object listener) { final ClassMeta<?> classMeta = ClassMeta.classMeta(listener.getClass()); final Iterable<MethodAccess> methods = classMeta.methods(); for (final MethodAccess methodAccess : methods) { final AnnotationData listen = getListenAnnotation(methodAccess); if (listen == null) continue; stopListeningToMethodEventListeners(listener, methodAccess, listen); } }
public static Object invokeOverloaded(Object object, String name, Object... args) { ClassMeta classMeta = ClassMeta.classMeta(object.getClass()); Iterable<MethodAccess> invokers = classMeta.methods(name); for (MethodAccess m : invokers) { if (m.respondsTo(args)) { return m.invoke(object, args); } } return Exceptions.die(Object.class, "Unable to invoke method", name, "on object", object, "with arguments", args); }
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; }