基于Quarkus CXF Extension实现HTTPS/SOAP服务客户端求助
在Quarkus 2.16中使用quarkus-cxf构建带PKCS12证书的HTTPS SOAP客户端
1. 添加必要依赖
在pom.xml中引入quarkus-cxf核心依赖、HTTP传输依赖,以及用于生成客户端代码的插件:
<dependencies> <dependency> <groupId>io.quarkiverse.cxf</groupId> <artifactId>quarkus-cxf</artifactId> <version>2.16.0.Final</version> </dependency> <dependency> <groupId>io.quarkiverse.cxf</groupId> <artifactId>quarkus-cxf-rt-transports-http-hc</artifactId> <version>2.16.0.Final</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>io.quarkiverse.cxf</groupId> <artifactId>quarkus-cxf-codegen-plugin</artifactId> <version>2.16.0.Final</version> <executions> <execution> <id>generate-soap-client</id> <phase>generate-sources</phase> <goals> <goal>wsdl2java</goal> </goals> <configuration> <wsdlOptions> <wsdlOption> <wsdl>${project.basedir}/src/main/resources/your-service.wsdl</wsdl> <extraargs> <extraarg>-client</extraarg> <extraarg>-p</extraarg> <extraarg>com.your.package.soap.client</extraarg> </extraargs> </wsdlOption> </wsdlOptions> </configuration> </execution> </executions> </plugin> </plugins> </build>
2. 配置PKCS12证书与客户端参数
在src/main/resources/application.properties中配置密钥库、信任库及客户端基础信息:
# PKCS12密钥库配置 quarkus.cxf.client.your-custom-client.ssl.key-store=classpath:your-cert.p12 quarkus.cxf.client.your-custom-client.ssl.key-store-type=PKCS12 quarkus.cxf.client.your-custom-client.ssl.key-store-password=your-cert-passwd # 信任库可复用同一份PKCS12文件(若包含服务端信任链) quarkus.cxf.client.your-custom-client.ssl.trust-store=classpath:your-cert.p12 quarkus.cxf.client.your-custom-client.ssl.trust-store-type=PKCS12 quarkus.cxf.client.your-custom-client.ssl.trust-store-password=your-cert-passwd # 客户端核心配置 quarkus.cxf.client.your-custom-client.wsdl=classpath:your-service.wsdl quarkus.cxf.client.your-custom-client.address=https://remote-soap-service.com/endpoint
3. 注入并调用SOAP客户端
直接通过CDI注入生成的客户端接口,即可发起远程调用:
import com.your.package.soap.client.YourServicePortType; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; @Path("/soap-demo") public class SoapClientResource { @Inject YourServicePortType serviceClient; @GET @Path("invoke") public String callRemoteService() { // 调用生成的SOAP服务方法 return serviceClient.yourServiceOperation("test-param"); } }
注意事项
- 替换所有
your-*占位符为实际项目的证书文件名、密码、WSDL路径、包名等信息 - 若服务端证书不在你的PKCS12信任链中,需单独准备信任库文件并更新配置
- 确保PKCS12文件放置在
src/main/resources目录下,或使用绝对路径指定文件位置
内容的提问来源于stack exchange,提问作者Claudio Zamboni
相关产品推荐
相关产品推荐

