根据wsdl文件搭建webService服务
- 环境介绍:
- jdk 1.8_u221(jdk1.8的其他版本没试过)
- apache cxf 2.7.11
- idea 企业版(开源版功能不全)
- 搭建过程
- 准备好需要的wsdl文件(如果是.xml文件,将后缀名改为wsdl)
- 安装jdk,并且配置环境变量,下载apache cxf,解压后,配置环境变量。完成上述步骤后,打开cmd,或者powershell,执行如下命令:
如果有报错内容为无法创建jvm,请降低jdk版本(至少是jdk1.7),或使用我上述的版本,如果还是不行,请降低apache cxf的版本。
3.完成了上述步骤后,打开idea,创建webService项目
version中看不到cxf的选项,没关系,随便选一个,然后libraries选择稍后设置。
创建好的目录结构如下图所示:
打开project structure
找到modules,取消src的源码文件标记,在src中新建java文件,并打上源码标记。
然后打开setting
找到web service设置,在cxf一栏填上cxf解压后的文件所在位置。
右键项目名,从wsdl文件生成源码。
在弹出的对话框中,选择wsdl文件,输出路径到src下的java文件夹下,使用JAXB2.0,输出模式为server,点击OK开始生成。
然后就会报错:
如果是上述的报错,可以打开jdk目录下的jre文件夹,再打开lib文件夹,修改jaxp.properties文件(如果没有这个文件就创建一个),添加一行:javax.xml.accessExternalSchema = all
然后在idea中删除掉生成失败创建的包(就是生成源码时填入的package prefix),重新生成源码。
生成完成后目录如下图:
注意红框中的接口类,生成源码时是不会有这个类的实现的,所以还需要我们自己来实现,该类下面是一个带有main函数的主程序入口,可以看到如下内容:
因此我们创建的实现类的名字就是接口类 + Impl。
新建实现类(记得加上@WebService的注解,否则会出错),去实现接口类中的所有接口,逻辑根据需要自己决定。如下图:
全部实现完成之后,就可以执行main函数了,main函数中 address的值就是webservice部署的ip地址,启动后在浏览器打开该ip地址,并在结尾加上 ?wsdl就可以看到wsdl文件,并可以使用soapUI进行测试。(下图是改写为读xml配置文件中的地址来部署服务,ReadXml类是笔者新建的)
4.打包服务。
为了使用方便,可以将整个服务进行打包,步骤如下:
添加artifacts,选择从模块生成
选择主类和目录,注意,目录一定要包含src下所有的内容,否则可能出错,如下图:
然后构建artifacts,点击build
此时可以查看out目录下,已经生成了.jar包