欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-28 13:27:56
...

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

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

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

 在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

相关标签: web service