CXF or JAX-WS 生成 webservice 客户端默认使用绝对路径读取wsdl文件,改为相对路径读取

最近在做项目的过程中需要读取webservice返回的信息,在idea通过CXF or JAX-WS生成的本地客户端调用service时,发现调用的service默认配置的是绝对的路径,
通过idea生成客户端
service中默认调用的wsdl文件路径是绝对路径
因为部署服务器上路径需要改动,所以考虑改为相对路径访问,但是直接通过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文件,改为相对路径读取.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值