将 JAX-RS 项目从 Jetty 迁移到 OpenLiberty

问题描述 投票:0回答:1

我想将一个简单的 JAX-RS 项目从 Jetty 迁移到 OpenLiberty。 问题在于 ResourceConfig 类(Jersey 的)的两个方法,它们在构造函数末尾调用以配置服务器。如何在 OpenLiberty 中实现它?我认为正确配置 server.xml 可能就足够了。有什么建议吗? (JAX-RS 项目托管于此处

@ApplicationPath("/api/*")
public class Application extends ResourceConfig {

    public Application() {
        // 
        // jakarta.ws.rs.core.Feature feature = ... 
        //
        register(feature);
        packages("io.agrest.example.api");
    }
}
jax-rs open-liberty
1个回答
0
投票

首先,您需要扩展

javax.ws.rs.core.Application
/
jakarta.ws.rs.core.Application
而不是
ResourceConfig

其次,您需要通过将适当的功能添加到

server.xml
元素来启用
<featureManager>
中适当的 JAX-RS 功能。

以下是基于 EE 版本的 JAX-RS 功能列表:

  • EE7:
    jaxrs-2.0
  • EE8:
    jaxrs-2.1
  • EE9:
    restfulWS-3.0
  • EE10:
    restfulWS-3.1
  • EE11:
    restfulWS-4.0

示例:

<server>
    <featureManager>
        <feature>jaxrs-2.0</feature>
    </featureManager>
</server>

最后,您需要注册您的 JAX-RS 资源/提供程序。

默认情况下,JAX-RS 将扫描您的应用程序以查找带有

@Provider
@Path
注释的类并自动注册它们。

如果您想要更多控制,可以使用(旧版)

Application.getClasses()
Application.getSingletons()
方法来注册提供程序和单例。这对于防止自动注册可能包含在捆绑的第三方依赖项中的 JAX-RS 提供程序很有用。

示例:

@ApplicationPath("/")
public class MyApplication extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<Class<?>>();
        classes.add(MyResource.class);
        return classes;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.