根据wsdl接口通过Apache CXF生成客户端代码

1、下载Apache CXF包,配置环境变量

下载链接:http://cxf.apache.org/download.html

a1

 在path环境变量中,加入bin目录,G:\tool\apache-cxf-3.3.5\bin,

验证环境变量是否配置成功,在dos窗口,输入wsdl2java 即可。

 2、生成客户端代码

1、常用到的命令:

wsdl2java -h 可以得到详细的参考文档

-p 指定cxf生成代码的包名;例如 希望在项目中的com.java.service.send包中生成代码,则在命令中加入 -p com.java.service.send ,代码就会生成在项目的send包中。该命令可以避免生成的代码中包名与项目包冲突的情况。

-d 指定cxf生成代码的目录;生成的代码,会在指定的目录 + -p 指定的包名 中。

-client 是否生成客户端测试webservice的代码;会生成main方法测试代码,可以参照这个类写调用代码。

-encoding 指定编码格式,如 UTF-8;

以下为了解命令:

-server 生成服务器启动webservice 的代码;

-impl 生成webservice的实现代码;

-keep 保留源文件;

-s <dir> 指定源代码存放目录;

-autoNameResolution 当报异常:具有相同名称 "xxxx" 的类/接口已在使用。请使用类定制设置来解决此冲突。

是因为 wsdl 文档中有重复的元素导致的,在命令中加此参数,可以解决类名冲突的问题。

-ant 生成build.xml文件;

-verbose 指定生成器以详细模式运行;

-all 生成所有开始端点代码;

-version 显示版本;

2、wsdl文件准备:

① 服务端 url,例如 http://168.1.x.x:8090/service-epr/services/epr?wsdl 

② wsdl文件,例如 xxxx.wsdl 不常用。可以访问wsdl接口,下载页面内容,去除无用的接口定义,否则会生成不需要的对象。

3、新建java工程,引入所需依赖:

<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-core</artifactId>
	<version>3.1.9</version>
</dependency>

<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-frontend-jaxws</artifactId>
	<version>3.1.9</version>
</dependency>

<dependency>
	<groupId>org.apache.cxf</groupId>
	<artifactId>cxf-rt-transports-http</artifactId>
	<version>3.1.9</version>
</dependency>

在applicationContext.xml 添加命名路径和标签(这里新创建了一个配置文件applicationContext-cxf.xml,方便配置): 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"  
    xsi:schemaLocation="   
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd   
		http://cxf.apache.org/jaxws 
		http://cxf.apache.org/schemas/jaxws.xsd">   
		
    <import resource="classpath:META-INF/cxf/cxf.xml" />   
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />     

</beans>

 4、生成客户端代码:

在dos窗口,输入 wsdl2java -p com.abc.service.send -d G:\workspace\ws_client\src\main\java -client http://168.1.x.x:8090/service-epr/services/epr?wsdl 

回车,完成。使用 wsdl 文件生成代码,与使用 url 生成方法一致。

也可以cd进到G:\workspace\ws_client\src\main\java目录下,wsdl2java -p com.abc.service.send -client http://168.1.x.x:8090/service-epr/services/epr?wsdl 

5、生成客户端代码后,可以按生成的客户端测试代码调用服务端接口,或者自己写:

        TestServiceIService ss= new TestServiceIService();
        TestServiceI service = ss.getTestServiceIPort();
        //添加调用接口所需参数
		Person p = new Person();
        p.setName("张三");
        Response res = service.getInfo(p);
        System.out.println("返回的结果是" + res.getCode() +" " + res.getMsg()); 

6、补充:

服务端需要添加头信息(验证信息)时,可在服务端接口的参数上指定添加@WebParam(name = "token", header = true),如:

    Response getInfo(@WebParam(name = "person") Person person,@WebParam(name = "token", header = true) String token,@WebParam(name = "idCode", header = true) String idCode,@WebParam(name = "requesttype", header = true) String requestType);

    //此接口生成的wsdl
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:edis="http://eprService.factory.com/">
       <soapenv:Header>
          <edis:requesttype>?</edis:requesttype>
          <edis:idCode>?</edis:idCode>
          <edis:token>?</edis:token>
       </soapenv:Header>
       <soapenv:Body>
          <edis:getInfo>
             <!--Optional:-->
             <person>
                <!--Optional:-->
                <name>?</name>
             </person>
          </edis:getInfo>
       </soapenv:Body>
    </soapenv:Envelope>

客户端使用 wsdl2java 生成代码后,调用服务端接口方法时,直接set参数就可以完成头信息的添加。

* 使用soapUI也可以生成客户端代码,以后学习后补充。

 

参考资源:https://blog.csdn.net/panshoujia/article/details/78899160

https://www.iteye.com/blog/jyao-1343722

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值