final TestAnnotation a = (TestAnnotation) targetClass.getAnnotation(TestAnnotation.class);
assertNotNull(a);
TestAnnotation2 a2 = a.annotationValue()[0];
assertNotNull(a2);
assertEquals(asList(a2.colors()), asList(Color.RED, Color.GREEN));
assertEquals(asList(a.arrayValue()), asList("foo", "bar"));
assertTrue(a.booleanValue());
assertEquals(a.byteValue(), 97);
assertEquals(a.charValue(), 'I');
assertEquals(a.classValue(), AnnotatedServiceImpl.class);
assertEquals(a.doubleValue(), 3.14);
assertEquals(a.enumValue(), Color.RED);
assertEquals(a.floatValue(), 2.718F);
assertEquals(a.intValue(), 123);
assertEquals(a.longValue(), 456L);
assertEquals(a.shortValue(), 3);
assertEquals(a.stringValue(), "foo");
assertNotNull(targetClass.getAnnotation(ServiceId.class));
Method method = targetClass.getMethod("doWork", String.class, String.class);
TestAnnotation methodAnnotation = method.getAnnotation(TestAnnotation.class);
assertNotNull(methodAnnotation);
a2 = methodAnnotation.annotationValue()[0];
assertNotNull(a2);
assertEquals(asList(a2.colors()), asList(Color.BLUE, Color.GREEN));
assertEquals(Arrays.asList(methodAnnotation.arrayValue()), Arrays.asList("barney"));
assertFalse(methodAnnotation.booleanValue());
assertEquals(methodAnnotation.byteValue(), 56);
assertEquals(methodAnnotation.charValue(), 'D');
assertEquals(methodAnnotation.classValue(), String.class);