Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tomcat未调用自定义注释处理器_Java_Tomcat_Annotations_Annotation Processing_Annotation Processor - Fatal编程技术网

Java tomcat未调用自定义注释处理器

Java tomcat未调用自定义注释处理器,java,tomcat,annotations,annotation-processing,annotation-processor,Java,Tomcat,Annotations,Annotation Processing,Annotation Processor,tomcat未调用自定义注释处理器。以下是我正在使用的注释处理器代码: @SuppressWarnings("restriction") @SupportedAnnotationTypes("io.strati.rs.cxf2.bindings.MyAnnotation") @SupportedSourceVersion( SourceVersion.RELEASE_8 ) public class SimpleAnnotationProcessor extends AbstractProces

tomcat未调用自定义注释处理器。以下是我正在使用的注释处理器代码:

@SuppressWarnings("restriction")
@SupportedAnnotationTypes("io.strati.rs.cxf2.bindings.MyAnnotation")
@SupportedSourceVersion( SourceVersion.RELEASE_8 )
public class SimpleAnnotationProcessor extends AbstractProcessor {

    public static List<String> str = new ArrayList<>();

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

        System.out.println("Into annotation processor ... 2");

        for ( Element element : roundEnv.getElementsAnnotatedWith(MyAnnotation.class)) {
            System.out.println("Method name is:"+element.getSimpleName());
            str.add(element.getSimpleName().toString());
        }   
        return false;
    }
}
我正在尝试访问tomcat应用程序中的列表,如下所示:

@GET
@Path("/dummy")
@MyAnnotation
@Produces({APPLICATION_JSON, APPLICATION_XML, TEXT_XML})
public void print(){
   System.out.println("List is:"+SimpleAnnotationProcessor.str);
}

即使该方法有注释,列表也被打印为空。我在maven编译器插件中指定了注释,也在META-INF/services/javax.annotation.processing.Processor中指定了注释。有人能告诉我注释处理器没有被调用的可能原因吗?

我怀疑Tomcat与此有关。注释处理在编译时进行,通常用于生成或修改代码。注释处理器可以看作是一个编译器插件

按照保留策略,Java编译器将在编译阶段将注释保留在类文件中,但是在运行时它不可用(也不应该可用)

很可能注释处理器实际上正在将print()方法名称添加到列表中(检查生成输出),但这同样只在编译代码时发生

运行时部署的web服务永远不会看到处理器在编译时填写的列表,这些环境是完全不同的

@GET
@Path("/dummy")
@MyAnnotation
@Produces({APPLICATION_JSON, APPLICATION_XML, TEXT_XML})
public void print(){
   System.out.println("List is:"+SimpleAnnotationProcessor.str);
}