4

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

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

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

4

2 回答 2

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 的类路径加载您的提供程序类

于 2013-07-09T06:39:35.443 回答
0

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

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

@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));
  }
}
于 2015-04-11T22:41:12.030 回答