使用apache cxf和maven我得到的代码看起来不正确
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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");
以上是关于使用apache cxf和maven我得到的代码看起来不正确的主要内容,如果未能解决你的问题,请参考以下文章
使用 Apache CXF 在 SOAP POST 请求中出错,但 curl 有效
Java, apache.CXF plugin - 使用本地 WSDL 使用远程托管服务