JavaEE EAP环境下OpenAPI Generator生成带实现的API客户端选型咨询
关于OpenAPI Generator Maven插件的疑问
问题背景
使用openapi-generator-maven-plugin:4.3.1时,加载jaxrs生成器失败,已获取到可用的Java相关生成器列表如下:
java jaxrs-cxf-client java-inflector java-msf4j java-pkmst java-play-framework java-undertow-server java-vertx java-vertx-web jaxrs-cxf jaxrs-cxf-extended jaxrs-cxf-cdi jaxrs-jersey jaxrs-resteasy jaxrs-resteasy-eap jaxrs-spec
1. 生成器的服务端/客户端分类
服务端生成器
java-inflector:生成基于Inflector框架的服务端代码java-msf4j:生成基于MSF4J框架的服务端代码java-play-framework:生成基于Play Framework的服务端代码java-undertow-server:生成基于Undertow的服务端代码java-vertx、java-vertx-web:生成基于Vert.x的服务端代码jaxrs-cxf、jaxrs-cxf-extended、jaxrs-cxf-cdi:生成基于CXF框架的JAX-RS服务端代码jaxrs-jersey:生成基于Jersey框架的JAX-RS服务端代码jaxrs-resteasy、jaxrs-resteasy-eap:生成基于Resteasy(适配EAP)的JAX-RS服务端代码jaxrs-spec:仅生成符合JAX-RS规范的API接口,无服务端实现java-pkmst:生成基于PKMST框架的服务端代码
客户端生成器
jaxrs-cxf-client:生成基于CXF框架的JAX-RS客户端实现代码java:基础Java客户端生成器,可生成通用HTTP客户端实现
2. JavaEE EAP环境下的客户端生成方案
你处于JavaEE EAP环境,需要生成带实现的客户端代码,优先推荐:
jaxrs-cxf-client:CXF是EAP支持的JAX-RS实现之一,生成的客户端代码可直接在EAP环境中使用,包含完整的调用逻辑,无需自行编写底层HTTP代码。jaxrs-resteasy-eap:虽然主打服务端代码生成,但部分版本支持生成客户端代码,适配EAP自带的Resteasy组件,兼容性更好。
如果上述生成器无法满足需求,Java 8非Spring的EAP环境下可采用以下实现方式:
- 手动基于Resteasy Client API实现:EAP内置Resteasy,直接用
ResteasyClientBuilder创建客户端,结合JAX-RS注解编写调用逻辑,示例代码:
ResteasyClient client = new ResteasyClientBuilder().build(); ResteasyWebTarget target = client.target("https://external-api-url"); ExternalApiService service = target.proxy(ExternalApiService.class); // 调用接口方法 service.someMethod();
- 使用Apache HttpClient:直接编写HTTP请求,自行处理请求/响应的序列化与反序列化,适合需要精细控制请求细节的场景。
- 基于Jersey Client API实现:若EAP配置了Jersey作为JAX-RS实现,可直接使用Jersey的客户端API调用外部接口,示例代码:
Client client = ClientBuilder.newClient(); WebTarget target = client.target("https://external-api-url"); Response response = target.request(MediaType.APPLICATION_JSON).get(); // 处理响应结果
3. 关于<generateSupportingFiles>true</generateSupportingFiles>的使用
靠该配置生成POM文件获取依赖确实不够直观,更推荐以下方式:
- 查阅对应生成器的官方文档,手动添加所需依赖到项目POM中。例如使用
jaxrs-cxf-client时,需添加CXF客户端相关依赖:
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-client</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency>
- 使用插件的
<dependencyManagement>配置,让插件自动管理依赖,但需确保插件版本与EAP环境的依赖版本兼容。
内容的提问来源于stack exchange,提问作者WesternGun
相关产品推荐
相关产品推荐

