对于(服务器端)Application
配置,我们可以使用
ResourceConfig rCfg = new ResourceConfig();
rCfg.packages("com.my.package", ...);
然后使用ResourceConfig
作为Application
对象初始化应用程序。
虽然使用客户端,但目前尚不清楚如何执行包扫描。
我们可以做到
Resource.from(SomeResourceClass.class);
如果我们知道类名,那么获取资源。在我的情况下,我们不知道班级名称,我们希望根据他们的@Path
获得班级。如果我们事先知道所有类名,我们可以使用重复调用Resource.from()
来获取所有资源,然后按路径索引它们,然后根据需要查找路径。
但我们事先并不了解所有的班级名称。有没有办法让特定包中的所有Resource
,甚至更好地扫描整个类路径 - 所有这些都没有初始化(服务器端)Application
?
答案 0 :(得分:1)
对于包扫描,您可以使用PackageNamesScanner
。这是一个例子
public static void main(String... args) throws Exception {
final String[] pkgs = {"com.example.jersey"};
final boolean recursive = true;
final AnnotationAcceptingListener asl = new AnnotationAcceptingListener(Path.class);
final PackageNamesScanner scanner = new PackageNamesScanner(pkgs, recursive);
while (scanner.hasNext()) {
final String next = scanner.next();
if (asl.accept(next)) {
try (final InputStream in = scanner.open()) {
asl.process(next, in);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
}
asl.getAnnotatedClasses().forEach(System.out::println);
}
不幸的是,我不认为有一个" ClassPathScanner"。类路径扫描仅用于servlet环境(并且Jersey可以在servlet环境之外运行),因此WebAppResourcesScanner
中的类路径扫描有一次性实现,但在你的情况下它不适用,如它扫描特定的路径。
您还可以查看有关扫描带注释类的类路径的一些常规帖子,例如: