【发布时间】:2013-07-07 20:53:23
【问题描述】:
我正在尝试使用一组打包在第 3 方 jar 中的 JAX-RS Web 资源。在同一个 jar 中,有一组 @Providers 我想用我自己的替换。
有没有办法告诉 JAX-RS 运行时跳过加载某些类?
资源和提供者在同一个包中。
【问题讨论】:
标签: java web-services jakarta-ee jax-rs
我正在尝试使用一组打包在第 3 方 jar 中的 JAX-RS Web 资源。在同一个 jar 中,有一组 @Providers 我想用我自己的替换。
有没有办法告诉 JAX-RS 运行时跳过加载某些类?
资源和提供者在同一个包中。
【问题讨论】:
标签: java web-services jakarta-ee jax-rs
您是否尝试过使用 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 的类路径加载您的提供程序类
【讨论】:
我能够在 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));
}
}
【讨论】: