我尝试使用此代码查询类中的注释:
for (final Annotation annotation : annotations) System.out.println(annotation);
final JsonSchema[] schemas = clazz.getAnnotationsByType(JsonSchema.class);
if (schemas.length == 0) {
throw new IllegalArgumentException("No JsonSchema annotation found.");
}
如果我通过单元测试到达这里,我会通过schemas.length测试。如果我通过Maven插件将其传递给URLClassLoader()。loadClass(),那么它会抛出IllegalArgumentException。但是,它也打印出来:
@mypackage.JsonSchema()
即。如果我遍历getAnnotations()的结果但是getAnnotationsByType找不到注释,那么注释似乎就在那里。可能导致这种情况的原因是什么?
编辑:如果我尝试循环并比较规范名称然后转换为JsonSchema它不会让我,因为它似乎是一个com.sun.proxy,它不是JsonSchema的实例。
编辑:因为他们在不同的班级加载器中,我确定。如何解决这个问题...
答案 0 :(得分:0)
知道了。
我正在传递一组URL来加载到新的URLClassLoader()。通过向构造函数添加Thread.currentThread()。getContextClassLoader()的第二个参数,它似乎将它们加载到同一个ClassLoader中,然后一切都按预期工作。