【发布时间】:2015-06-23 23:46:27
【问题描述】:
我有一个在 OSGi 中运行的 Web 应用程序并已部署到 Tomcat。我一直在通过在我的插件中为扩展点 org.eclipse.equinox.http.registry 做出贡献并将以下包添加到 manifest.mf 来注册我的 servlet:
Import-Package: javax.servlet,
javax.servlet.http
到目前为止一切都很好。
现在,我想让我的一个 servlet 支持异步。我试图通过在我的 servlet 类中添加以下注释来做到这一点:
@WebServlet(name = "OrderServlet", urlPatterns = {"/order"}, asyncSupported = true)
public class OrderServlet extends HttpServlet {
...
}
这需要将 javax.servlet.annotation 添加到清单中:
Import-Package: javax.servlet,
javax.servlet.annotation,
javax.servlet.http
当我使用此更改重新部署我的 WAR 时,我的插件无法加载。当我尝试手动启动捆绑包时,OSGi 控制台显示以下错误:
id State Bundle
5 INSTALLED abc.asyncServlet_1.0.0
osgi> start 5
gogo: BundleException: The bundle "abc.asyncServlet_1.0.0 [5]" could not be resolved. Reason: Missing Constraint: Import-Package: javax.servlet.annotation; version="0.0.0"
osgi> diag 5
update@plugins/abc.asyncServlet_1.0.0.jar [5]
Direct constraints which are unresolved:
Missing imported package javax.servlet.annotation_0.0.0.
我使用的是Tomcat 7,验证了我的tomcat/lib目录下的servlet-api.jar(3.0版)有注解包。
我会错过什么?任何指针表示赞赏!
【问题讨论】:
-
您使用哪个版本的 Equinox/Servlet 桥接器?旧版本没有导出所有(较新)servlet 包(请参阅this bug)。请避免向cross post提问。