apache - 使用 apache cxf 和 maven 我得到的代码看起来不正确
问题描述
我有几个 WSDL 文件,用于生成客户端代码以使用 SOAP 与远程服务通信。生成的代码包括如下所示的一行:
public class AddProductService extends Service {
static {
URL url = null;
try {
url = new URL("file:/Users/developer/spg/spg-subman/SubscriptionManager/src/main/resources/wsdl/AddProduct.xml");
我已经删除了一些生成的代码,并且只包含了我认为损坏的行。
WSDL 文件位于项目中,src/main/resources/wsdl
并且该目录将不存在于将部署此代码的位置。
我正在使用带有 maven 的 cxf-codegen-plugin 插件来生成此代码。
我有一些问题:
- 运行时是否需要 WSDL?
- 如果是这样,我可以将其复制到 jar 文件中并将上面的 URL 指向一个
classpath:
URL 吗? - 我可以将 WSDL 文件复制到目标目录中,然后使用这些文件为客户端生成 java 代码吗?
解决方案
我正在回答这个问题,因为我找到了答案,并且我看到很多人发布的代码片段显示了我遇到的相同问题,实际上 cxf 代码示例演示了相同的问题。我也有多个 wsdlf 文件,如何解决也不清楚。
解决此问题的元素是:
<wsdlLocation>AddProduct.xml</wsdlLocation>
从我的角度来看,问题是标签 wsdlLocation 建议了一个路径,但这不是路径的条目,只要将 wsdl 包含在类路径中,您只需将 wsdl 文件名放在此处并在运行时将找到它的 jar 文件。
最后,在 cxf-codegen-plugin 文件的配置部分的 pom 中的节看起来像这样:
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/AddProduct.xml</wsdl>
<extraargs>
<extraarg>-client</extraarg>
</extraargs>
<wsdlLocation>AddProduct.xml</wsdlLocation>
</wsdlOption>
</wsdlOptions>
</configuration
这样做的结果是,在静态声明中,您最终会得到以下结果:
URL url = AddProductService.class.getResource("AddProduct.xml");
而不是这个:
url = new URL("file:/Users/tonyg/App/MyManager/src/main/resources/wsdl/AddProduct.xml");
推荐阅读
- ffmpeg - 在 discord.py 中使用 ffmpeg 库时出现 OpusError
- android - WebService 请求从 Android 代码转码到 Swift 代码
- xamarin - Xamarin 缺少指令
- javascript - Discord.js 克隆类别中的特定语音通道,“X”次
- compilation - 使用 javassist 创建一个类并从代码中加载
- java - 春天云流kafka背压
- python - 将多个自定义函数应用于 Python 中 Pandas 中多个 groupby 对象的多个列
- python - 通过 stdin input() 读取文件时,它只加载 1 行
- bash - 动态 IPTables For Loop 的问题
- ansible - 使用 Ansible Callback,我可以提取当前运行的任务的 YAML 代码吗?