我正在尝试使用以下代码从类中查询批注:
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插件将类的URL传递到URLClassLoader()。loadClass()中,则它将抛出IllegalArgumentException。但是,它也会打印出:
@mypackage.JsonSchema()
即,如果我遍历getAnnotations()的结果,但批注似乎在那儿,但getAnnotationsByType找不到。是什么原因造成的?
编辑:如果我尝试遍历并比较规范名称,然后将其强制转换为JsonSchema,则它不会让我,因为它似乎是com.sun.proxy,它不是JsonSchema的实例。
编辑:我确定是因为它们位于不同的类加载器中。很好的解决方法...
知道了。
我正在传递URL数组,以供类加载到新的URLClassLoader()。通过将Thread.currentThread()。getContextClassLoader()的第二个参数添加到构造函数中,它似乎将它们加载到相同的ClassLoader中,然后一切都按预期方式工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句