You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jakarta迁移后Jetty服务器配置异常:资源类未指定问题排查

排查CXF迁移Jakarta后Jetty启动异常:At least one resource class should be specified

异常原因

该异常由CXFNonSpringJaxrsServlet初始化时触发,核心问题是无法从指定的MainApplication类中获取到有效的JAX-RS资源类,常见诱因包括:

  • MainApplication未正确适配Jakarta规范(仍使用旧的javax包)
  • MainApplication未重写方法返回资源类/实例
  • 资源类未使用Jakarta版本的JAX-RS注解

解决方案

1. 修正MainApplication类

确保类继承自Jakarta版本的Application,并明确返回资源类集合:

import jakarta.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

public class MainApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resourceClasses = new HashSet<>();
        // 添加你的所有JAX-RS资源类,例如订单服务资源类
        resourceClasses.add(OrderResource.class);
        // 若有其他资源类,继续添加
        // resourceClasses.add(AnotherResource.class);
        return resourceClasses;
    }
}

注意:所有资源类的注解(@Path、@GET、@POST等)必须来自jakarta.ws.rs包,而非旧的javax.ws.rs包。

2. 确认Servlet初始化配置

检查代码中初始化参数的正确性:

  • 确保参数键为jakarta.ws.rs.core.Application,这是CXF 4.x适配Jakarta后的正确参数名
  • 确认MainApplication类在类路径中可被正常加载,无类找不到的隐性错误

3. 备选方案:直接指定资源类

若不想通过Application类管理资源,可直接在Servlet初始化时指定资源类:

// 替换原有Application参数配置
servlet.setInitParameter("jaxrs.serviceClasses", "com.yourpackage.OrderResource,com.yourpackage.AnotherResource");

验证要点

  • 检查依赖中无javax和jakarta包的混合(例如排除所有javax.ws.rs相关依赖)
  • 调试MainApplication的getClasses()方法,确认返回集合非空
  • 确认所有资源类已正确标记Jakarta版本的JAX-RS注解

内容的提问来源于stack exchange,提问作者PriyanWL2022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:53:16