我有几个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插件来生成此代码。
我有一些问题:
classpath:
URL吗?我正在回答这个问题,因为我找到了答案,并且我看到很多人发布了代码片段,显示了我遇到的同样问题,实际上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");