




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目第十天 webservice 药品目录同步1 课程计划1、webservice入门程序目标:webservice开发流程 客户端编写、服务端编写目标:了解webservice应用场景、优缺点。2、药品目录同步功能开发1)详细理解开发流程2)CXF(webservice框架)入门程序3)功能实现 客户端(市级采购系统)编写、服务端(省级采购系统)编写2 回顾 -webservice概念webservice是一种跨平台(客户端和服务端操作系统不一样,开发语言不一样)远程调用技术。由客户端调用服务端。webservice使用SOAP网络协议(简单对象访问协议),客户端和服务端之间传输对象,开发基于面向对象开发。客户端调用方使用socket服务端接收请求使用socketsoapsoap3 webservice入门3.1 需求客户端调用方使用socket服务端HelloService使用socketsoapsoap客户端远程 调用服务端的HelloService接口。3.2 三种开发规范jax-ws:客户端和服务端使用soap协议传输。(常用 )jaxm&saaj:客户端和服务端使用soap协议传输,提供了一些api操作soap协议底层内容,不常用 。jax-rs:客户端和服务端使用http协议传输,创建RESTful接口。3.3 服务端需要开发一个HelloService接口由客户端来进行远程 调用。3.3.1 创建服务端工程不需要添加第三方jar包。3.3.2 HelloService注意:如果此类上标记Webservice注解说明此类的方法被远程调用,要求 至少有一个公开public方法。3.3.3 发布服务相当于之前创建SocketServer,需要指定监听的端口及请求的url。运行上边的方法,服务启动成功了。3.3.4 查阅wsdl说明书输入webservice的地址wsdl地址:webservice地址+?wsdl从下向上查阅:第一步:找service标签(服务视图)service包括很多port ,每个port对应一个webservice地址第二步:找port对应的portType是什么(最终要找portType(service接口类型)第三步:找到了portType找到要调用的方法总结:wsdl描述webservice服务接口的详细信息,就是服务端编写的service接口方法信息。3.4 客户端3.4.1 分析客户端底层还使用socket进行调用,使用了webservice技术后,jax-ws开发规范提供一套方法通过一些自动生成的代码(封装好的代码)完成底层的socket请求。3.4.2 wsimport工具wsimport工具生成webservice客户端调用代码在jdk/bin下1、先创建一个目录存储生成的代码2、cmd命令行,cd进入上边的目录3、输入wsimport命令-s:生成java源代码. :在当前目录生成最后一个参数:使用说明书的地址3.4.3 创建客户端工程将上边生成的调用代码拷贝到客户端在生成的调用代码中已包括了服务端service 接口。作用:使用生成的代码,创建一个基于service接口的代理对象,通过代理对象向远程 webservice服务接口发起请求。(不用手动实现socket请求) 3.5 webservice开发流程总结1、创建服务端的service接口及实现类,在实现类上添加注解WebService注解2、创建客户端1)使用wsimport工具(jdk/bin目录下)生成一些调用代码(作用:通过调用代码远程向服务端发起请求)2)将调用代码拷贝到客户端工程3)通过生成现成的代码创建一个代理对象,通过代理对象向服务端发起请求。客户端代理对象底层使用socket服务端HelloService底层使用socketsoapsoap3.6 客户端的第二种编写方法(使用jdk的Service类)3.6.1 问题上边客户端编写代码中,生成的Service类中将webservice服务端的地址硬编码了如果将来要更改webservice服务端的ip地址,需要重新使用wsimport生成调用代码!问题就是麻烦!解决:使用jdk的Service类完成客户端程序编写 最终生成代理对象!3.6.2 代码3.7 调用公网的webservice接口3.7.1 需求天气查询服务接口火车时刻查询服务接口pc电脑手机webservice3.7.2 查询天气信息1、从网上找到天气查询接口wsdl说明书2、根据说明书编写客户端程序1)使用wsimport工具根据说明书生成调用代码2)将生成的代码拷贝到客户端工程3)使用生成的代码创建代理对象确定调用哪个接口,从wsdl中找service中port找到port对应的portType及portType下方法代码:3.8 soap协议3.8.1 soap协议 是什么soap=http+xml :基于http传输xml数据。3.8.2 跟踪soap协议内容(了解)使用工具:工具跟踪协议内容原理 (代理思想):配置监视:启动监视:修改客户端代码,客户端向monitor工具发请求:请求内容:响应内容:soap协议格式:3.9 webservice应用场景 3.9.1 面向互联网公开的接口soap协议是一个w3c标准协议。wsdl说明书是一个w3c标准。3.9.2 用于内部接口服务3.10 webservice优缺点优点:soap协议是标准wsdl是标准缺点:使用webservice调用技术 速度慢。客户端服务端对象序列化为xml数据soapxml数据转java对象对象序列化为xml数据xml数据转java对象技术选型 :如果对性能没 有要求,建议使用soap协议传输,因为它是一个标准协议。如果对性能有要求,要求要高,建议使用http或socket。性能对比:sockethttpsoap面向互联网作接口开发,最常用 的是http.4 药品目录同步功能开发4.1 需求及执行流程action1、同步页面2、同步提交servicewebservice服务接口请求获取省级药品目录市平台数据库dao查询省级药品目录表省平台数据库在市平台数据库创建YPXX_SHENGservice向市平台数据库插入记录dao向ypxx表插入记录返回省级药品目录客户端(市级医药采购系统)服务端(省级医药采购系统)4.2 创建 YPXX_SHEN表(模拟省平台药品目录)4.3 创建省平台工程创建yycg-province工程(模拟省平台),maven工程:继承:yycg-parent依赖:工程要通过hibernate访问数据,依赖yycg-framework工程自动实现ssh框架整合。添加framework的依赖:4.4 cxf框架介绍4.4.1 什么是cxf框架cxf实现webservice客户端、webservice服务端。cxf功能强大,常用cxf作接口。4.4.2 下载cxf由于cxf提供了wsdl2java工具(根据wsdl说明书生成调用代码 功能类似wsimport)(此工具可以生成soap1.1、1.2协议的调用代码)需要配置环境变量。4.5 cxf入门程序cxf 框架在实际使用时候和spring整合。使用cxf+spring开发:webservice服务端: 1)service被spring管理 2)将原来编程方式发布改为 spring配置方式发布服务webservice客户端: 1)原来编程方式创建代理对象改为spring配置方式创建代理对象,同时代理对象由spring管理。4.5.1 服务端(yycg-province) 添加cxf依赖要使用cxf+spring,加入spring及cxf的依赖添加cxf的依赖org.codehaus.woodstox woodstox-core-asl $woodstox.version org.apache.neethi neethi $neethi.version org.apache.cxf cxf-rt-frontend-jaxws $cxf.version org.apache.cxf cxf-rt-ws-policy $cxf.version org.apache.cxf cxf-rt-transports-http $cxf.version 创建applicationContext-cxfserver.xml 配置约束此文件中将来配置发布webservice服务需要配置以下4个约束: HelloService注意:接口上添加WebService在实现类添加spring的Service注解,service交给spring管理 cxf的servlet在yycg-province中web.xml配置,所有webservice请求由cxf的servlet解析CXFServletorg.apache.cxf.transport.servlet.CXFServlet1CXFServlet/ws/* 在applicationContext-cxfserver.xml发布服务因为基于soap协议,使用jaxws规范,使用jaxws:server标签进行配置原来编程方式发布服务改为配置方式。 理解cxf处理webservice请求的流程 发布到tomcat启动需要在yycg-province中配置tomcat插件 错误1:原因:yycg-province依赖yycg-framework,在yycg-framework要读config/perties错误2:启动yycg-province,找helloServiceImpl这个bean在spring容器没有helloServiceImpl的bean。原因:helloServiceImpl所在包路径和spring要扫描的包路径不一致,修改cn.itcast.yycg改为:错误:修改路径:访问wsdl说明书 小结1、service接口,上边添加WebService、在service实现类添加Service(交给 spring管理)2、发布服务使用配置方式4.5.2 客户端原来编程方式创建代理对象改为spring配置方式创建代理对象,同时代理对象由spring管理。 使用wsdl2java工具客户端调用代码wsdl2java工具是cxf框架提供,根据wsdl说明书生成调用代码。-d:生成源代码生成完成:将调用代码拷贝到市级医药采购系统(客户端) 在yycg-web添加cxf的依赖客户端使用cxf+spring的方式。 配置applicationContext-cxfclient.xml使用jaxws:client 配置代理对象 测试客户端请求服务端加载spring容器,自动创建webservice服务端的代理对象。4.6 功能实现4.6.1 服务端(yycg-province) 添加ypxx_sheng的映射文件由于yycg-framework中加载改下路径的映射文件需要映射文件的路径注意修改映射文件中的实体类的路径 dao查询ypxx_sheng表的记录 service 发布服务在applicationContext-cxfserver.xml配置: 启动tomcat启动完成,查阅wsdl4.7 上午课程回顾做接口开发,包括:1、本地api调用接口(service接口、dao接口。)2、远程 调用的接口 ,在另一个服务器上开发一个service接口,供客户端远程调用。接口开发包括:客户端、服务端客户端(电脑)wsimport生成调用代码创建代理对象(通过代理对象向服务端发送soap协议)cxf+spring方式生成代理对象服务端(电脑)service接口发布服务(启动socketServer,监听端口)实际开发:cxf框架+spring通过soap协议请求通过soap协议响应4.8 客户端(yycg-web 市平台)作用:1、请求webservice服务端获取省级药品目录信息2、将省级药品目录插入到市级医药采购系统的数据库的ypxx表 根据药品流水号来判断,如果没有再插入。4.8.1 dao(yycg-dao)向ypxx表插入记录使用BaseDao中save方法4.8.2 service(yycg-service)service完成向ypxx表插入记录,在service有事务控制的。1、根据流水号判断,如果在ypxx表不存在再插入。在yycg-service工程添加4.8.3 使用wsdl2java工具客户端调用代码wsdl2java工具是cxf框架提供,根据wsdl说明书生成调用代码。使用wsdl2java的命令行:wsdl2java -d . wsdl说明书地址1、确定wsdl说明书地址,执行命令2、将调用代码拷贝到yycg-web工程4.8.4 配置applicationContext-cxfclient.xml 代理对象使用jaxws:client 配置代理对象4.8.5 action(yycg-web)请求webservice服务端获取省级药品目录信息调用service接口向省级药品目录信息插入到ypxx表1)注入同步药品目录的webservice接口代理对象2)遍历省级药品目录,调用service插入到ypxx表代码如下:/同步页面public String syncypxx()return syncypxx;/同步请求(提交)public void syncypxxsubmit()/相当于webservice客户端,生成代理对象向远程 的webservice发起请求/远程 请求webservice服务接口获取省级药品目录List list = syncYoxxService.findYpxxShengAll();/定义一个变量记录成功数量 long total =0;/遍历list,调用service向ypxx插入for(YpxxSheng ypxxSheng:list)/将ypxxSheng对象属性拷贝到ypxx对象Ypxx ypxx = new Ypxx();BeanUtils.copyProperties(ypxxSheng, ypxx);/要进行属性拷贝,原始对象和目标对象不能为NULL,只有属性名一样的属性才能拷贝到/针对交易状态处理,省级表中的值为1和2,转成ypxx对象中的sysDictInfoByJyztif(ypxxSheng.getJyzt().equals(1)SysDictInfo sysDictInfoByJyzt = new SysDictInfo();sysDictInfoByJyzt.setId(00301);/正常ypxx.setSysDictInfoByJyzt(sysDictInfoByJyzt);elseSysDictInfo sysDictInfoByJyzt = new SysDictInfo();sysDictInfoByJyzt.setId(00302);/暂停ypxx.setSysDictInfoByJyzt(sysDictInfoByJyzt);/这里要捕获异常,不想因为一记录的异常导致其它记录无法同步try ypxxService.insertYpxx(ypxx);total+;/成功数量加1 catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();/提示用户同步成功多少条SubmitResultInfo submitResultInfo = ResultUtil.createSubmitResult(同步成功+total+条);/转json输出this.write_json(submitResultInfo);配置action 在struts-ypml.xml配置4.8.6 jsp同步页面同步按钮 :js方法及form定义4.8.7 调试1、启动yycg-province服务端2、启动yycg-ma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专模板视频协议合同样本
- 商标转让出售购买合同范本
- 南充蓬安县2025年引进62名高层次人才笔试备考题库附答案详解
- 期货从业资格之《期货法律法规》考试押题卷及答案详解【各地真题】
- 万花筒课件教学课件
- 期货从业资格之《期货基础知识》通关考试题库含答案详解【培优】
- 难点解析鲁教版(五四制)7年级数学下册期末测试卷新版附答案详解
- 临床执业医师过关检测试卷必考附答案详解
- 粮油食品检验人员考试历年机考真题集及答案详解【历年真题】
- 期货从业资格之《期货法律法规》高分题库附答案详解(达标题)
- 基于CHO细胞的单抗生产
- 精选浙江省普通高中生物学科教学指导意见(2023版)
- 黄新波-智能变电站在线监测课件
- 陕西康城药业股份有限公司中药、植物提取及固体制剂项目环评报告
- GB/T 2820.12-2002往复式内燃机驱动的交流发电机组第12部分:对安全装置的应急供电
- GB/T 12599-2002金属覆盖层锡电镀层技术规范和试验方法
- 2023年哈尔滨市动力区法院书记员招聘笔试模拟试题及答案解析
- JG-017结构实体位置与尺寸偏差检测作业指导书
- 压铸件常见问题-气孔
- 景观工程工作流程解读(PPT)
- 走近数字PCR学习培训课件
评论
0/150
提交评论