gpt4 book ai didi

java - 创建扩展 javax.ws.rs.core.Application 的可重用 "base"类

转载 作者:行者123 更新时间:2023-11-30 07:18:47 29 4
gpt4 key购买 nike

以下是使用 Java 7 JDK 通过 Java EE 6 实现的问题。

情况

我正在尝试实现一个解决方案,其中我有 javax.ws.rs.core.Application 的某种“核心”或“基础”版本类(class)。我有一个核心框架,它是一个单独的 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 类。我想了几种方法来尝试解决这个问题,但都不起作用。

  1. CoreApplication 保留为类,并从 ChildApplication 继承 CoreApplicationApplication。这显然行不通,因为 Java 不允许多重继承。
  2. 使CoreApplication成为一个接口(interface)。这在某些方面是可行的,但我只能继承 ChildApplication 中的方法签名,这并不能给我真正的代码重用。

我想知道是否有人可以提出解决这个问题的最佳设计。

感谢所有提供帮助的人!

最佳答案

这两个类实际上都扩展了Application,所以这不是问题。问题出在 @ApplicationPath 注释上。带此注解的类作为主配置类。

关于java - 创建扩展 javax.ws.rs.core.Application 的可重用 "base"类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37954830/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com