我不确定如何命名这个问题,但我会尝试解释问题所在。我目前正在 Web 应用程序中测试Atmosphere 框架。我首先阅读了文档,然后测试了chat-multiroom 示例。我使用tomcat 8.5在eclipse中运行它。当大气 servlet 初始化时,它将扫描一个包以查找具有某些注释的任何类,如果找到注释,它将使用路径作为键将该类添加到地图中。为此,它必须首先扫描自己的包以查找它应该使用的注释并将它们添加到可用注释的映射中。必须填充此列表才能初始化带注释的类。代码如下所示:
public Class<? extends Processor> handleProcessor(Class<?> clazz) {
if (Processor.class.isAssignableFrom(clazz)) {
Class<Processor> p = (Class<Processor>) clazz;
if (logger.isTraceEnabled()) {
logger.trace("Processor {} associated with {}", p, p.getAnnotation(AtmosphereAnnotation.class).value());
}
annotations.put(p.getAnnotation(AtmosphereAnnotation.class).value(), p);
return p;
}
return null;
}
所以它会遍历它找到的每个类并检查它是否实现了处理器。处理器是大气提供的接口import org.atmosphere.annotation.Processor;
但是,当我调试此代码时,它会将 clazz 与 jdk:s 接口 javax.annotation.processing.Processor 而不是 org.atmosphere.annotation.Processor 进行比较。这导致地图为空。这会导致未加载端点,因为没有要查找的注释。
如果我下载气氛代码并将其复制到我的 src 文件夹中,它可以正常工作。
我目前正在使用 Eclipse IDE,我想知道是否有办法以某种方式配置项目或 tomcat 服务器以使其了解应该使用哪个接口。