![536c027574ca7682a79418dd3bffc9b2.png](https://img-blog.csdnimg.cn/img_convert/536c027574ca7682a79418dd3bffc9b2.png)
Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。
CXF 包含了大量的功能特性,但是主要集中在以下几个方面:
支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL优先开发,也支持从 Java 的代码优先开发模式。容易使用:CXF 设计得更加直观与容易使用。有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA。
本例会以一个成品例子来演示代码结构与发布步骤,使用IDEA+Plsql+Weblogic+CXF框架发布SOAP服务的接口。
01
# 软件准备
1. 配置本地weblogic 12c服务
本地没有安装的自行下载
https://pan.baidu.com/s/1Y4Fs0TH962XI4waJAuRHdQ
提取码:s39t
若网盘失效则请去官网下载
https://www.oracle.com/middleware/technologies/fusionmiddleware-downloads.html
安装方法参考
https://docs.oracle.com/en/middleware/fusion-middleware/12.2.1.4/wlsig/installing-oracle-weblogic-server-and-coherence-software.html#GUID-E4241C14-42D3-4053-8F83-C748E059607A2. Jdk版本1.8以上
3. Maven
4. Idea软件
02
# 开发概述
PLSQL+CXF框架+Idea软件发布webservice的方法。本例会以一个成品例子来演示代码结构与发布步骤。
03
# 步骤
![9e4a9dece9c222c7a85cedef87ebc1e9.png](https://img-blog.csdnimg.cn/img_convert/9e4a9dece9c222c7a85cedef87ebc1e9.png)
创建项目
![2cb136cb6411e1302930c42067bb6948.png](https://img-blog.csdnimg.cn/img_convert/2cb136cb6411e1302930c42067bb6948.png)
![ed440dbf526b970a8d8ef56d71a9c7e3.png](https://img-blog.csdnimg.cn/img_convert/ed440dbf526b970a8d8ef56d71a9c7e3.png)
![9e4a9dece9c222c7a85cedef87ebc1e9.png](https://img-blog.csdnimg.cn/img_convert/9e4a9dece9c222c7a85cedef87ebc1e9.png)
修改项目目录结构
右键src文件夹,取消其根目录的标记
![bd68d3280fadf16fc6901488fd8aa3be.png](https://img-blog.csdnimg.cn/img_convert/bd68d3280fadf16fc6901488fd8aa3be.png)
Src下分别创建java文件夹与resource文件夹,并将java文件夹标记为sources root,source文件夹设为resources root
![273a53f9e8be6c5d40d29062b319bf7d.png](https://img-blog.csdnimg.cn/img_convert/273a53f9e8be6c5d40d29062b319bf7d.png)
![3d299001ce43754410af38c12cbc4cc8.png](https://img-blog.csdnimg.cn/img_convert/3d299001ce43754410af38c12cbc4cc8.png)
![9e4a9dece9c222c7a85cedef87ebc1e9.png](https://img-blog.csdnimg.cn/img_convert/9e4a9dece9c222c7a85cedef87ebc1e9.png)
设置依赖
将此参考pom文件复制到项目根目录下,并右键pom.xml,标记为maven项目(pom.xml文件请详见下文网盘链接)
![f5710b8de140a29604675026d1f018b3.png](https://img-blog.csdnimg.cn/img_convert/f5710b8de140a29604675026d1f018b3.png)
Pom.xml文件中以下几个属性针对开发项的不一样要注意每次修改
![78f8e10decf6b064d862e1337b8e26ff.png](https://img-blog.csdnimg.cn/img_convert/78f8e10decf6b064d862e1337b8e26ff.png)
![cde97a65c5926a9e4d7d37bd20a5dc3a.png](https://img-blog.csdnimg.cn/img_convert/cde97a65c5926a9e4d7d37bd20a5dc3a.png)
![9e4a9dece9c222c7a85cedef87ebc1e9.png](https://img-blog.csdnimg.cn/img_convert/9e4a9dece9c222c7a85cedef87ebc1e9.png)
复制代码样例
将cn.zip压缩包中的代码复制到java目录下,构建出java.cn.com.aaa目录结构
![cd832a360d46e8545142239bcf99d4b2.png](https://img-blog.csdnimg.cn/img_convert/cd832a360d46e8545142239bcf99d4b2.png)
将resource.zip中的文件复制到项目resource目录下,构造出如图所示结构
![85c66ef32f6216c2500db8bdae16ca19.png](https://img-blog.csdnimg.cn/img_convert/85c66ef32f6216c2500db8bdae16ca19.png)
将WEB-INF.zip中的内容放到web=>WEB-INF目录下方,直接覆盖已有文件
![ee54a704439a1a968683b7358138e80c.png](https://img-blog.csdnimg.cn/img_convert/ee54a704439a1a968683b7358138e80c.png)
PLSQL安装包。本例中涉及到的数据库程序代码部署到开发环境数据库中
以上涉及到的文件及压缩包请详见链接:
https://pan.baidu.com/s/1txX46rvpLbc-OWhBHkIPuw
提取码:fyq9
![9e4a9dece9c222c7a85cedef87ebc1e9.png](https://img-blog.csdnimg.cn/img_convert/9e4a9dece9c222c7a85cedef87ebc1e9.png)
启动weblogic
Edit configuration,添加weblogic配置
![452385af59d5365edcc4ea730c02d339.png](https://img-blog.csdnimg.cn/img_convert/452385af59d5365edcc4ea730c02d339.png)
部署artifact
![c367b920b6e526f28eca870ab617231a.png](https://img-blog.csdnimg.cn/img_convert/c367b920b6e526f28eca870ab617231a.png)
![50f60852761b51038cf2910d7bc8d84c.png](https://img-blog.csdnimg.cn/img_convert/50f60852761b51038cf2910d7bc8d84c.png)
![1a63880449a9ec6fa99c37ca64cf69c9.png](https://img-blog.csdnimg.cn/img_convert/1a63880449a9ec6fa99c37ca64cf69c9.png)
Ok退出后,点击debug
![66c831ec2844ffeadc1613edd46b0587.png](https://img-blog.csdnimg.cn/img_convert/66c831ec2844ffeadc1613edd46b0587.png)
点击debug后idea会做两件事,第一启动weblogic,第二部署项目artifact。在本例中,由于上文没有提数据源的事,所以weblogic的数据源是没有建的
所以会出现如图所示报错
![b29d871b9c4bd652fc5dd849c6ab2c59.png](https://img-blog.csdnimg.cn/img_convert/b29d871b9c4bd652fc5dd849c6ab2c59.png)
但是我们不需要理会,浏览器访问http://localhost:7001/console,登录后 服务=>数据源=>创建一般数据源,注意最后一步要为数据源勾选adminserver.
如图所示,项目根目录resource下的applicationContext.xml中jndiName属性的值要与新建的数据源名称一致
![e82dcfb91db6f0547c7dd96c0af29645.png](https://img-blog.csdnimg.cn/img_convert/e82dcfb91db6f0547c7dd96c0af29645.png)
![f2bd9efd9738fd8eb213b05a60dbee0a.png](https://img-blog.csdnimg.cn/img_convert/f2bd9efd9738fd8eb213b05a60dbee0a.png)
创建完成后无需重启weblogic,重新部署artifact即可。
![592face87f770b51a0748e21252d205c.png](https://img-blog.csdnimg.cn/img_convert/592face87f770b51a0748e21252d205c.png)
效果:
![8957179be8e1e954be0aacbfc7116695.png](https://img-blog.csdnimg.cn/img_convert/8957179be8e1e954be0aacbfc7116695.png)
![d550e5f79919e808bbfaf0cef33a0485.png](https://img-blog.csdnimg.cn/img_convert/d550e5f79919e808bbfaf0cef33a0485.png)
![5438a38fecea2ff742d9f2c194f304f5.png](https://img-blog.csdnimg.cn/img_convert/5438a38fecea2ff742d9f2c194f304f5.png)
获取wsdl地址后即可去soapui测试了
![862a163ae105ea5a0b1bf79879161d2d.png](https://img-blog.csdnimg.cn/img_convert/862a163ae105ea5a0b1bf79879161d2d.png)
04
# 代码解释
![9e4a9dece9c222c7a85cedef87ebc1e9.png](https://img-blog.csdnimg.cn/img_convert/9e4a9dece9c222c7a85cedef87ebc1e9.png)
服务地址根目录与服务名称
![4adcf284ef30e89ce479b3808d0e745e.png](https://img-blog.csdnimg.cn/img_convert/4adcf284ef30e89ce479b3808d0e745e.png)
![1b48bb9b83472772ad8d8fb430de9426.png](https://img-blog.csdnimg.cn/img_convert/1b48bb9b83472772ad8d8fb430de9426.png)
![9e4a9dece9c222c7a85cedef87ebc1e9.png](https://img-blog.csdnimg.cn/img_convert/9e4a9dece9c222c7a85cedef87ebc1e9.png)
与PLSQL程序的连接
![d0b0cbc783bff375b3955bdf5cd70a5e.png](https://img-blog.csdnimg.cn/img_convert/d0b0cbc783bff375b3955bdf5cd70a5e.png)
![0877c559c989258bd684070d920417c9.png](https://img-blog.csdnimg.cn/img_convert/0877c559c989258bd684070d920417c9.png)
本例中,程序主要内容是返回gl明细数据,x_gl_infos是一个数据库对象集合,需要根据它的结构写出对应的java类声明它的结构,根据实际开发需求四个类需要分别修改(建新的吧),若需求中无此类复杂结构,那么可以删掉。X_outTypehandler在这类复杂数据结构中是必须要有的,目的是将plsql返回的数据库对象装到java对象中。
![1b33668bda9d91237286079c07159a5a.png](https://img-blog.csdnimg.cn/img_convert/1b33668bda9d91237286079c07159a5a.png)
在mapper中设置select id,Dao类中调用select id,impl类中调用Dao.selectid
![96e0ace588bb1c239a358dc283b897af.png](https://img-blog.csdnimg.cn/img_convert/96e0ace588bb1c239a358dc283b897af.png)
![9e4a9dece9c222c7a85cedef87ebc1e9.png](https://img-blog.csdnimg.cn/img_convert/9e4a9dece9c222c7a85cedef87ebc1e9.png)
参数结构
传入固定为msgheader+in参数明细
![45bf4cfa70feb3bde97d765e15714b36.png](https://img-blog.csdnimg.cn/img_convert/45bf4cfa70feb3bde97d765e15714b36.png)
传出参数固定为部分中间件字段+OUTPUT类。OUTPUT类内容为out参数明细。其中的中间件字段无需改动。OUTPUT类需要重写,根据实际PLSQL程序的OUT参数结构来写。
![22a16dc7b8e43aabbaed305e4216e140.png](https://img-blog.csdnimg.cn/img_convert/22a16dc7b8e43aabbaed305e4216e140.png)
![2c2e5d9e35bf884712ab8f4b34b5c086.png](https://img-blog.csdnimg.cn/img_convert/2c2e5d9e35bf884712ab8f4b34b5c086.png)
05
# 后续思考
1.尝试修改项目目录结构为java/erp/com/cux/gl
2.参照x_outTypehandler,传入参数为复杂集合的情况该怎么写
![a978d8ef9a9bdacc6f0661de176f39fa.png](https://img-blog.csdnimg.cn/img_convert/a978d8ef9a9bdacc6f0661de176f39fa.png)
作者:代少秋
审核:董乃浩、姚昆
编辑:张玉