最近在做项目的过程中需要读取webservice返回的信息,在idea通过CXF or JAX-WS生成的本地客户端调用service时,发现调用的service默认配置的是绝对的路径,
因为部署服务器上路径需要改动,所以考虑改为相对路径访问,但是直接通过classpath配置会提示无法找到对应 wsdl 文件,看到外网上提供了一个方法思路,可以先把静态文件路径注册,然后通过资源管理器获取。
一、配置wsdl文件位置
1、在pom.xml 文件中build标签内配置plugin
指定wsdl文件的路径,(org.apache.cxf的版本为2.4.1),关键配置:
<wsdlOption>
<wsdl>${project.basedir}/src/main/resources/wsdl/foo.wsdl</wsdl>
<wsdlLocation>classpath:wsdl/foo.wsdl</wsdlLocation>
</wsdlOption>
2、设置静态文件过滤
因为wsdl文件放在resources 文件夹下的wsdl 文件夹中,所以需要再build标签内加入resources 标签管理后缀为.wsdl的静态文件。
完整配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.4.1</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${project.basedir}/src/main/resources/wsdl/foo.wsdl</wsdl>
<wsdlLocation>classpath:wsdl/foo.wsdl</wsdlLocation>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources><!--静态资源配置-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.wsdl</include>
</includes>
<filtering>false</filtering>
</resource>
</resources><!--资源配置-->
</build>
二、修改service中文件路径
通过xml的配置,此时通过资源管理器使用相对路径获取到wsdl文件
1、修改注解地址
此处需要加入classpath:
@WebServiceClient(name = "vehicleService", targetNamespace = "***",
wsdlLocation = "classpath:wsdl/foo.wsdl")
2、修改获取url方式
从原来直接通过绝对路径new Url,改为通过资源管理器获取静态文件
url = VehicleService.class.getClassLoader().getResource("wsdl/foo.wsdl");
完整代码如下:
@WebServiceClient(name = "vehicleService", targetNamespace = "***",
wsdlLocation = "classpath:wsdl/foo.wsdl")
public class VehicleService
extends Service
{
static {
URL url = null;
WebServiceException e = null;
try {
//wsdl 文件配置在 resources/wsdl 文件夹下
url = url = VehicleService.class.getClassLoader().getResource("wsdl/foo.wsdl");;
} catch (Exception ex) {
e = new WebServiceException(ex);
}
}
}
参考资料: CXF or JAX-WS 生成 webservice 客户端默认使用绝对路径读取wsdl文件,改为相对路径读取.