我试图使用打包在第三方jar包中的一组JAX-RS web资源。在同一个jar包中,有一组@Provider,我想要用自己的替换它们。
是否有一种方法告诉JAX-RS运行时跳过加载某些类?
这些资源和提供者位于同一个包中。
我试图使用打包在第三方jar包中的一组JAX-RS web资源。在同一个jar包中,有一组@Provider,我想要用自己的替换它们。
是否有一种方法告诉JAX-RS运行时跳过加载某些类?
这些资源和提供者位于同一个包中。
我能够在 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));
}
}
你尝试过使用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的类路径加载提供程序类