private void scanBindings() throws IOException { for (Map.Entry<Key<?>, Binding<?>> e : globalInjector.getAllBindings().entrySet()) { Key<?> bindingKey = e.getKey(); Binding<?> binding = e.getValue(); TypeLiteral boundTypeLiteral = bindingKey.getTypeLiteral(); Type boundType = boundTypeLiteral.getType(); if (boundType instanceof Class) { final Class boundClass = (Class) boundType; for (Method method : boundClass.getMethods()) { if ((method.getModifiers() & Modifier.STATIC) == 0) { for (Annotation annotation : method.getAnnotations()) { if (annotation instanceof Path) { Path pathSpec = (Path) annotation; RouteSpec routeIn = Routes.parse(pathSpec.value(), true); endPointMethods.add(new EndPointMethod(routeIn, bindingKey, boundClass, method)); } } } } if (MessageBodyReader.class.isAssignableFrom(boundClass)) { messageBodyReaders.add(0, (MessageBodyReader) globalInjector.getInstance(bindingKey)); } if (MessageBodyWriter.class.isAssignableFrom(boundClass)) { messageBodyWriters.add(0, (MessageBodyWriter) globalInjector.getInstance(bindingKey)); } } } }
public <T> byte[] toBytes(MediaType mediaType, T o) throws IOException { if (o == null) { return null; } Class<T> clazz = (Class<T>) o.getClass(); MessageBodyWriter<T> writer = findWriter(clazz, null, EMPTY_ANNOTATIONS, mediaType); if (writer == null) { throw new IllegalArgumentException( "cannot convert " + clazz.getName() + " into byte[] (" + mediaType + ")"); } ByteArrayOutputStream baos = new ByteArrayOutputStream(512); writer.writeTo(o, clazz, clazz, EMPTY_ANNOTATIONS, mediaType, EMPTY_OBJECT_HEADERS, baos); return baos.toByteArray(); }