以下是使用Java 7 JDK在Java EE 6中实现的问题。
我正在尝试实现一个解决方案,其中我有一个javax.ws.rs.core.Application
类的“核心”或“基础”版本。我有一个核心框架,它是一个单独的Java项目,此时它作为 core.jar 存在,其他应用程序可以包含它。我想要做的是在这个核心框架中有一个类似“CoreApplication”的东西,它扩展了jax-rs Application
类,它看起来像这样:
@ApplicationPath("")
public class CoreApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new HashSet<Class<?>>();
resources.add(ApiListingResource.class);
resources.add(SwaggerSerializers.class);
// Other common resources from the core framework
return resources;
}
@Override
public Set<Object> getSingletons() {
Set<Object> singletons = new HashSet<Object>();
// Register the Jackson provider for JSON
JacksonJaxbJsonProvider jaxbProvider = new JacksonJaxbJsonProvider();
jaxbProvider.setMapper(getUniversalJacksonMapper());
singletons.add(jaxbProvider);
// Other common singletons from the core framework
return singletons;
}
}
如果我将 core.jar 包含在正在使用的应用程序中并尝试执行以下操作:
public class ChildApplication extends CoreApplication {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = super.getClasses();
resources.add(ChildSpecificResource.class);
return resources;
}
...
}
然后这个ChildApplication
类永远不会运行。相反的是,运行CoreApplication
类(假设因为实际上扩展了jax-rs Application
类)并忽略了ChildApplication
。
我似乎需要做的是确保ChildApplication
类直接扩展Application
- 这显然是它被调用的唯一方式。所以,如果我这样做,那么我需要一种方法来继承我的子应用程序中的CoreApplication
类。我想到了几种方法来尝试解决这个问题,但都没有工作。
CoreApplication
作为一个班级,并从CoreApplication
继承Application
和ChildApplication
。这显然是行不通的,因为Java不允许多重继承。CoreApplication
成为一个界面。这可以在某些方面起作用,但后来我只能继承ChildApplication
中的方法签名,这不会给我真正的代码重用。我想知道是否有人可以提出最佳设计来解决这个问题。
感谢所有帮助的人!
答案 0 :(得分:1)
这两个类实际上都扩展了Application
,所以这不是问题。问题是@ApplicationPath
注释。具有此批注的类用作主要配置类。