首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按包名扫描resteasy资源

按包名扫描resteasy资源
EN

Stack Overflow用户
提问于 2015-07-24 15:10:46
回答 2查看 3.9K关注 0票数 0

我正在配置resteasy应用程序,需要自动扫描(两个jaxrs应用程序在类路径中,加载时中断)

出于这个原因,我将我的web.xml配置为:

代码语言:javascript
复制
    <context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>

<context-param>
    <param-name>resteasy.resources</param-name>
    <param-value>
        io.swagger.jaxrs.listing.ApiListingResource,
        com.mycompany.resource.ClientResource,
        com.mycompany.resource.AccountResource,
        ... etc
    </param-value>
</context-param>

在resteasy中是否有任何方法可以按包(com.mycompany.resource.*)名称扫描而不必添加每个资源?这似乎是可能的jaxrs,但不是resteasy

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-24 17:02:06

这些文件非常清楚:

要注册的完全限定JAX-RS资源类名的逗号分隔列表。

您可以自己使用倒影库来实现这一点。假设以下文本文件:

代码语言:javascript
复制
com.foo.bar.TestResource
com.foo.baz.*

我们可以在应用程序类中读取这个文本文件,搜索所有类并将其添加到getClasses返回的集合中

代码语言:javascript
复制
@ApplicationPath("/")
public class RestApplication extends Application {

    Set<Class<?>> classes;

    public RestApplication(@Context ServletContext servletContext) {
        classes = new HashSet<>();
        try {
            URI resourcesConfig = servletContext.getResource("/WEB-INF/resources.txt").toURI();
            List<String> resources = Files.readAllLines(Paths.get(resourcesConfig), Charset.forName("UTF-8"));
            for (String resource : resources) {
                parseResources(resource);
            }
        } catch (IOException | URISyntaxException | ClassNotFoundException ex) {
            throw new IllegalArgumentException("Could not add resource classes", ex);
        }
    }

    private void parseResources(String resource) throws ClassNotFoundException, IOException {
        if (!resource.endsWith(".*")) {
            classes.add(Class.forName(resource));
            return;
        }
        String pkg = resource.substring(0, resource.length() - 2);
        Reflections reflections = new Reflections(pkg);
        for (Class<?> scannedResource : reflections.getTypesAnnotatedWith(Path.class)) {
            classes.add(scannedResource);
        }
    }

    @Override
    public Set<Class<?>> getClasses() {
        return classes;
    }

}

注意:我们只是在类级别上添加带有@Path注释的资源。

票数 3
EN

Stack Overflow用户

发布于 2015-07-24 15:53:09

我不是jaxrs的专家,但你查过下面的那些吗?

代码语言:javascript
复制
resteasy.scan 
resteasy.scan.resources 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31614046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档