TomEE 9 Plume等版本无法访问Microprofile OpenAPI接口如何解决
问题原因说明
你遇到的情况是TomEE不同发行版的默认组件启用策略差异导致的:WebProfile、Plume、Plus版本仅预置了MicroProfile相关组件的实现包,但默认不会自动加载OpenAPI扩展,只有MicroProfile专属发行版才会默认开启该扩展,因此才会出现相同构件在不同版本下访问/openapi端点表现不一致的问题。
解决步骤
- 第一步:调整pom.xml中OpenAPI依赖的作用域,避免类冲突
由于TomEE所有发行版都已经内置了MicroProfile OpenAPI的实现,不需要将API包打包到应用中,将依赖的scope改为provided即可:<dependency> <groupId>org.eclipse.microprofile.openapi</groupId> <artifactId>microprofile-openapi-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> - 第二步:在应用中开启OpenAPI扩展
在你的应用WEB-INF目录下新增openejb-jar.xml配置文件,添加如下配置启用当前应用的OpenAPI支持:<?xml version="1.0" encoding="UTF-8"?> <openejb-jar xmlns="http://tomee.apache.org/xml/ns/openejb-jar-9.0"> <properties> <property name="tomee.mp.openapi.enabled" value="true" /> <!-- 可选配置:自定义OpenAPI端点路径,默认是/openapi --> <!-- <property name="tomee.mp.openapi.path" value="/custom-openapi" /> --> </properties> </openejb-jar> - 第三步(可选):全局开启OpenAPI扩展
如果需要在TomEE实例上部署的所有应用都支持OpenAPI端点,可以直接修改TomEEconf/system.properties文件,添加配置:tomee.mp.openapi.enabled = true
验证
注意:如果你的应用配置了非空的上下文根(比如应用部署后访问路径前缀为
/myapp),那么OpenAPI端点的访问路径需要拼接上下文根,即http://localhost:8080/myapp/openapi。
配置完成后重新打包应用部署到Plume/Webprofile/Plus版本的TomEE,启动后即可正常访问对应路径下的OpenAPI Schema。
内容的提问来源于stack exchange,提问作者steppenwolfe3
相关产品推荐
相关产品推荐

