从JAX-RS中排除一个提供程序

5

我试图使用打包在第三方jar包中的一组JAX-RS web资源。在同一个jar包中,有一组@Provider,我想要用自己的替换它们。

是否有一种方法告诉JAX-RS运行时跳过加载某些类?

这些资源和提供者位于同一个包中。

2个回答

0

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

为了减轻指定每个资源类的痛苦,我使用了一个叫做 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));
  }
}

0

你尝试过使用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 中排除特定文件的方法。 - Karthik Ramachandran
2
这是一个构建时的解决方案,它依赖于构建war文件的人拥有eclipse。我希望能够在JAX-RS框架内完全解决这个问题。 - Karthik Ramachandran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接