Camel JBang运行报错:导入的SOAP服务相关包/类不存在
解决Camel JBang调用SOAP服务时找不到客户端类的问题
问题分析
你遇到的编译错误,本质是org.oorsprong.websamples_countryinfo.CountryInfoService属于SOAP服务对应的Java客户端类,这类类不会自动存在,需要通过WSDL生成,或者让Camel在运行时动态加载WSDL创建客户端。以下是三种可行的解决方法:
方法一:生成客户端类并加入类路径
- 生成客户端类:使用CXF的
wsdl2java工具,从目标SOAP服务的WSDL生成Java类。命令示例:
执行后会生成wsdl2java -p org.oorsprong.websamples_countryinfo http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wsdlorg/oorsprong/websamples_countryinfo目录及对应类文件。 - 指定类路径运行:把生成的类放到本地目录(比如
src/main/java下),运行Camel时加上类路径参数:camel run TestWeb.java --deps=camel-cxf:3.14.0 --classpath=src/main/java/
方法二:使用Camel CXF动态客户端(无需生成类)
修改TestWeb.java代码,直接通过WSDL动态创建客户端,无需导入生成的类。示例代码片段:
from("timer:invokeSoap?period=10000") .setBody(constant("{\"sCountryISOCode\": \"US\"}")) .to("cxf://http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService" + "?wsdlURL=http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wsdl" + "&serviceName={http://www.oorsprong.org/websamples.countryinfo}CountryInfoService" + "&portName={http://www.oorsprong.org/websamples.countryinfo}CountryInfoServiceSoap" + "&operationName=CapitalCity") .log("SOAP Response: ${body}");
修改后直接用原命令运行:
camel run TestWeb.java --deps=camel-cxf:3.14.0
方法三:打包客户端类为JAR并作为依赖引入
- 打包JAR:生成客户端类后,将其打包成JAR文件:
jar cvf countryinfo-client.jar org/ - 运行时引入本地JAR:在
camel run命令中加入本地JAR依赖:camel run TestWeb.java --deps=camel-cxf:3.14.0,file:./countryinfo-client.jar
注意事项
- 确保Camel与CXF版本兼容:Camel 3.14.0对应的CXF版本建议用3.5.x,若运行时出现CXF相关报错,可显式指定CXF依赖,比如
--deps=camel-cxf:3.14.0,org.apache.cxf:cxf-rt-frontend-jaxws:3.5.2。 - 若你的代码仓库中已有生成的客户端类,只需确保运行时类路径包含这些类所在目录即可。
内容的提问来源于stack exchange,提问作者Guru Tata
相关产品推荐
相关产品推荐

