WebLogic部署Jersey集成OpenAPI访问文档报404问题排查
问题背景
- 基于OpenAPI实现Jersey REST服务接口清单自动生成与文档展示,参考Swagger 2.X官方集成文档完成依赖引入与配置后,WAR包部署至WebLogic 12.2.1.4服务器
- 访问目标地址
https://localhost:7003/lsw/dme/datamanagement-svc/rest/myopenapi/openapi.json时返回404,无法列出服务接口 - 前置调整:原生OpenAPI资源因未添加
@RightNeeded权限注解访问返回401,因此自定义继承BaseOpenApiResource的CustomOpenApiResource类添加对应权限校验注解 - 已提供排查依据:项目
pom.xml依赖配置、web.xml配置、weblogic.xml配置、继承ResourceConfig的DataManagementApplication启动类、自定义CustomOpenApiResource类代码
404问题排查与修复点
按以下优先级逐一核对配置:
1. 自定义OpenAPI资源注册校验
Swagger 2.X默认只自动注册原生BaseOpenApiResource,自定义子类不会被自动识别加载,必须手动注册:
- 检查
DataManagementApplication的getClasses()方法,确认已显式添加CustomOpenApiResource类注册逻辑,参考代码:
@Override public Set<Class<?>> getClasses() { Set<Class<?>> resources = new HashSet<>(); // 原有业务接口注册逻辑保留 resources.add(CustomOpenApiResource.class); return resources; }
- 核对
CustomOpenApiResource类及方法上的@Path注解值:类级@Path需为/myopenapi,openapi.json对应方法级@Path需为/openapi.json,注意路径前后斜杠不要多写漏写,保证拼接后路径和访问地址完全匹配。
2. WebLogic类加载冲突校验
WebLogic 12.2.1.4自带Jersey 1.x旧版本依赖,会和项目引入的Jersey 2.x、Swagger 2.X依赖冲突,导致资源类初始化失败:
- 检查
weblogic.xml配置,需开启WEB-INF类优先加载:
<container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor>
- 若使用过滤优先加载策略,需将
io.swagger.core.v3.*、org.glassfish.jersey.*相关包全部加入优先加载列表,禁止WebLogic加载自带旧版本类。
3. Jersey路由映射校验
- 核对
web.xml中Jersey Servlet的url-pattern配置:若配置为/rest/*,则全路径拼接规则为「应用上下文路径 + /rest + 资源类@Path值 + 资源方法@Path值」,逐段和目标访问地址比对,确认上下文路径/lsw/dme/datamanagement-svc配置正确,无路径段重复或遗漏。 - 若Jersey配置为包扫描模式,检查
jersey.config.server.provider.packages参数,确认CustomOpenApiResource所在包路径已加入扫描列表。
4. 拦截逻辑校验
- 临时移除
CustomOpenApiResource类上的@RightNeeded注解,测试接口是否可正常访问,排除自定义权限拦截器路径匹配逻辑错误,在资源路由匹配前提前返回404的情况。 - 访问
/rest路径下其他已正常运行的业务接口,确认Jersey根路由本身可正常访问,排除应用部署失败、上下文路径错误导致的根路径404。
5. 日志校验
查看WebLogic部署启动日志,搜索CustomOpenApiResource相关加载记录,确认类是否被Jersey成功注册,是否存在类找不到、依赖冲突、注解解析失败的报错信息,根据报错对应修复依赖或配置即可。
若以上配置全部核对无误,检查Swagger 2.X依赖版本和项目使用的Jersey版本兼容性,版本不兼容会导致OpenAPI资源初始化失败,无法对外提供服务。
内容的提问来源于stack exchange,提问作者Ruchi Gupta
相关产品推荐
相关产品推荐

