简短版本:如何使用Felix注释为多个选择器强制在servlet上匹配最多的吊索?
我在OSGI包中定义了一些servlet。我正在使用org.apache.felix.scr.annotations.sling.SlingServlet注释。
@SlingServlet(
methods={GET},
selectors {"v1"}
...
)
public class MyServlet extends SlingAllMethodsServlet {}
...
@SlingServlet(
methods={GET},
selectors {"v1","special"}
...
)
public class MySpecialServlet extends MyServlet {}
我的问题是,当两个选择器都存在时,我找不到强制MySpecialServlet只处理请求的方法。
GET http://localhost/my/resource.v1.special.json
有时它只处理v1选择器的请求。
GET http://localhost/my/resource.v1.json
似乎在使用felix webconsole发布新jar之后,如果我在任何其他资源之前请求双选择器resource.v1.special.json,那么MySpecialServlet也将继续处理仅v1请求。
有没有办法可以强制更通用的servlet使用当前注释来处理更一般的选择器列表?我错过了一些部分注释吗?我相信这个系统可能正在使用较旧的注释。也许值得迁移?我试图不要过于干扰我被要求做的这项小任务。
如果我把这些技术的一部分混为一谈,请耐心等待。我刚刚解决了这个问题,我还在整理它。请更正任何错误的条款。
答案 0 :(得分:1)
在MySpecialServlet
之前注册v1.special
,例如selectors = {"v1.special"}
。
...必须配置选择器,因为它们将在URL中指定,作为点分隔字符串列表,例如print.a4 ......
据我所知,当通过选择器列表注册servlet时,Sling会单独处理它们(在OR条件下)。因此,在selectors = {"v1","special"}
注册特殊servlet的情况下,如果您请求,将调用doGet
方法:
http://localhost/my/resource.v1.special.json
或http://localhost/my/resource.special.json
或http://localhost/my/resource.v1.json