【问题标题】:Excluding a provider from JAX-RS从 JAX-RS 中排除提供程序
【发布时间】:2013-07-07 20:53:23
【问题描述】:

我正在尝试使用一组打包在第 3 方 jar 中的 JAX-RS Web 资源。在同一个 jar 中,有一组 @Providers 我想用我自己的替换。

有没有办法告诉 JAX-RS 运行时跳过加载某些类?

资源和提供者在同一个包中。

【问题讨论】:

    标签: java web-services jakarta-ee jax-rs


    【解决方案1】:

    您是否尝试过使用 Maven 排除项。我遇到过类似的问题并用

    解决了
        <!-- For Restful Client -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.8</version>
            <exclusions>
                <exclusion>
                    <groupId>com.sun.jersey</groupId>
                    <artifactId>resteasy-jaxrs</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    

    然后您可以使用 Eclipse 的类路径加载您的提供程序类

    【讨论】:

    • 谢谢,问题是我想排除的特定提供者与特定 jar 中的某些资源混合在一起。所以我需要一种从 jar 中排除特定文件的方法。
    • 这是一个构建时间解决方案,取决于构建战争的人是否拥有 Eclipse。我希望有一个完全在 JAX-RS 框架内的解决方案。
    【解决方案2】:

    我能够在 JBoss AS 7 中通过在 Application 类中手动指定提供程序和资源来解决这个问题。默认情况下,当您不覆盖getClasses() 方法时,JBoss 会自动扫描每个提供程序和资源。通过覆盖此方法,JBoss 禁用自动扫描,并且我能够指定除我想排除的第 3 方之外的每一个提供者/资源。

    为了减轻必须指定每个资源类的痛苦,我使用了一个名为reflections 的库来动态查找我的自定义资源类,这些资源类都保存在同一个包中。这是我的解决方案:

    @ApplicationPath("/")
    public class MyApplication extends Application {
      @Override
      public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<>();
        addResources(classes, "my.package.containing.resources");
        return classes;
      }
    
      private void addResources(final Set<Class<?>> classes, final String pkg) {
        classes.addAll(new Reflections(pkg, new SubTypesScanner(), new TypeAnnotationsScanner()).getTypesAnnotatedWith(Path.class));
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      相关资源
      最近更新 更多