目录
前言
本篇为java操作CXF框架调用WebService
WebService的简介
之前我们都是从数据库获取数据,但是有些数据库我们自己可能是操作不了的
于是别人就把他的数据共享出来,放在一个地方,只要我们调用一个方法,即可获取他的数据
这一系列操作,就构成了WebService
百度里搜WebService服务,找到其中一个网站
随便选择其中一个功能
点击带有wsdl后缀的链接(后面会讲为什么)
把上面xml往下拉,会发现wsdl:service ,箭头所指向的就是服务名,其实也是我们写WebService时的类名
找到wsdl:port ,箭头所指是一个我们WebService里写的接口,这个接口返回了地址对象
而这个地址对象就是实际的功能
点击之后会发现下面2个方法
使用java调用WebService
在命令行窗口输入如下命令,wsimport 这个命令其实是java jdk里面的命令,可以查看帮助文档
-s代表指定生成到哪个位置
-s后面的.(点) 代表的是路径,现在我们在D盘的test目录下, 点 就代表是在这个目录下生成一些东西,当然也可以指定目录
在命令的后面加上 -Xnocompile 可以不编译生成的java文件,也就没有class文件
测试代码
把上面的类复制到工程里(只复制java后缀的)
如果运行提示缺少空指针异常,添加以下cxf依赖即可
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-core</artifactId>
<version>2.6.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
运行结果
提供一个简单的服务
注意:下面的sayHello方法漏写了一个参数
使用Endpoint提供服务
在浏览器里输入服务的地址,并且后面加上?wsdl即可访问
使用wsimport生成类,然后复制过来,直接调用即可
使用CXF框架生成标准的WebService服务
注意:我们的项目的jdk必须是1.6版本以上的
需要引入jar包(上面讲了)
配置servlet
打开servlet类我们发现需要一个配置文件,且名称固定
可以重新初始化配置文件名
cxf的约束文件
上面一部分是spring的,下面一部分是cxf的约束
<?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"
xmlns:soap="http://cxf.apache.org/bindings/soap"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/bindings/soap
http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
写一个接口,并且写一个实现类
在接口上加上webservcie的注解
在cxf.xml里配置bean,服务类交给spring创建
并且需要注册服务,id可以随意指定,address随意指定
但是要和访问地址匹配上,项目名后面service 是我们在web.xml里配置servlet的访问路径
这里返回的就是功能bean,上面spring注册过的
然后直接运行程序,相当于开启了服务
使用java jdk的方式来访问
使用CXF框架的命令来访问
需要下载cxf框架,并且进入bin目录
而我们只需要复制这一个功能接口即可
只引入这一个接口的情况下,右箭头会引入一个object文件,需要删掉,不然找不到文件
配置客户端的cxf.xml
之前配置的是服务端的cxf.xml,使用的是jaxws:server
需要注意的是,这后面没有?wsdl
直接获取spring对象,然后转换成对应的接口即可调用对应的方法