版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WebServices技术架构讲师:王治国
WebServices开发系列讲座
WebServices技术架构JDK1.6直接支持WebServices使用axis实现webservice使用xfire实现webservicecxfWebServices案例(银联ATM存取系统)
JavaCodeCallJavaobjxmlXmlJava<?xml…CallReturn=xxx…<?xml…CallArg1arg2…C++xmlXmlc++C++CallJDK6增加了对WS的支持importjavax.xml.ws.*;importjavax.jws.*;importjavax.jws.soap.*;@WebService(targetNamespace="")@SOAPBinding(style=SOAPBinding.Style.RPC)publicclassHelloService{ publicstaticvoidmain(String[]args) { Endpoint.publish("",newHelloService()); }
@WebMethod publicvoidsayHello() { System.out.println("hello"); }}?wsdl
wsimport-dc:\wsclient-sc:\wsclientpublicstaticvoidmain(String[]args){HelloServiceServicehss=newHelloServiceService();HelloServicehs=hss.getHelloServicePort();System.out.println(hs.getClass().getName());hs.sayHello();}
日程
Axis的安装配置服务端开发即时发布定制发布WebServices的优点WebServices技术SOAPWSDLUDDISOA(面向服务的架构)
Axis安装配置
安装JDK安装并配置Tomcat从官方网站下载最新的Axis项目打包文件,并将webapps下axis目录拷贝到Tomcat的webapps目录下验证Axis的安装浏览所发布的服务
服务器端开发
即时发布使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(JavaWebService的缩写),然后将该文件放到Tomcat下面的webapps\axis目录下即可。但是JWS的web服务发布是一个很简单的Web服务发布方式,在页面中你不能使用包,而且由于代码是在运行期被编译的,所以在部署之后,你也很难找到错误所在。
定制发布
编写要发布为服务的java类编译生成的class文件应该放在Tomcat下的webapps\axis\WEB-INF\classes\下面编写deploy.wsdd文件描述服务的名称,入口等信息切换到命令行下,执行
javaorg.apache.axis.client.AdminClient–p8085deploy.wsdd卸载服务找到undeploy.wsdd文件,修改其中的参数值运行javaorg.apache.axis.client.AdminClientundeploy.wsdd注意:deploy.wsdd,undeploy.wsdd,批处理文件,可放任意目录
服务器端开发WSDD的高级特性
Webservices的作用域范围我们可以在wsdd文件中加入如下
<servicename="MyService"...><parametername="scope"value="value"/>...</service>Value的值可以为request,sesssion,applicationRequest:为每个请求创建一个服务对象Session:为每个调用这个WebServices的客户端创建一个服务对象。Application:服务端创建一个服务对象,为所有的webserivces客户端使用,不能存储客户端的一些个性化数据。调用web服务DLL动态接口调用方式(DynamicInvocationInterface)动态代理方式(DynamicProxy)静态方式(Stubs)
DLL方式publicstaticvoidmain(String[]args){try{Stringendpoint="";//实例化一个服务对象serviceServiceservice=newService();
//创建一个空的调用对象Call,设置Call的操作名称,目标地址,传入参数等等//执行调用后即可得到返回的结果Callcall=(Call)service.createCall();call.setTargetEndpointAddress(new.URL(endpoint));call.setOperationName(newQName("","add3"));//CalltoaddParameter/setReturnTypeasdescribedinuser-guide.html//call.addParameter("testParam",//org.apache.axis.Constants.XSD_STRING,//javax.xml.rpc.ParameterMode.IN);//call.setReturnType(org.apache.axis.Constants.XSD_STRING);Integerret=(Integer)call.invoke(newObject[]{1,3});System.out.println(ret);}catch(Exceptione){System.err.println(e.toString());}}
动态代理方式动态代理需要一个本地的接口作为代理publicinterfaceITestDynameicProxyextendsRemote{publicStringgetMessage()throwsRemoteException;}publicstaticvoidmain(String[]args)throwsException{StringwsdlUrl="";StringnameSpaceUri="";StringserviceName="Test1Service";StringportName="Test1";ServiceFactoryserviceFactory=ServiceFactory.newInstance();Serviceservice=serviceFactory.createService(newURL(wsdlUrl),newQName(nameSpaceUri,serviceName));ITestDynameicProxyproxy=(ITestDynameicProxy)service.getPort(newQName(nameSpaceUri,portName),ITestDynameicProxy.class);System.out.println(proxy.getMessage());}通过输入wsdl地址,命名空间地址和服务名,用服务工厂创建出一个服务实例,再通过设置端口名得到一个服务类型的服务代理对象,通过该代理,就可以直接访问web服务了。
静态方式按常规方式发布一个webservice得到wsdl文件通过web页面直接另存为通过Java2WSDL工具类生成(javaorg.apache.axis.wsdl.Java2WSDL-odemo1.wsdl-l-nhttp:///test.Demo)利用WSDL2Java工具类生成客户端调用代码(javaorg.apache.axis.wsdl.WSDL2Javademo.wsdl-pclient)在生成的代码基础上,进行客户端的调用 publicstaticvoidmain(String[]args)throwsServiceException,RemoteException{ DemoServiceLocatordemoService=newDemoServiceLocator(); Demodemo=demoService.getdemo(); System.out.println(demo.getMessage()); }
XFire服务器端参考开发指南手动完成使用IDE直接生成客户端(类似Axis,有三种客户端调用的方式)
DDL方式publicstaticvoidmain(String[]args)throwsMalformedURLException,Exception{Clientclient=newClient(newURL(""));Object[]results=client.invoke("example",newObject[]{"张孝祥"});System.out.println((String)results[0]);}
动态代理方式publicstaticvoidmain(String[]args){//1-制造一个service对象,来利用webservice所提供的服务Serviceservice=newObjectServiceFactory().create(firstPortType.class);//2-制作一个XFire的代理工厂,有了代理之后,调用webservice的方法就好像是在本地进行调用了XFireProxyFactoryfactory=newXFireProxyFactory(XFireFactory.newInstance().getXFire());//3-获取webservice提供服务的网址StringsayHelloURL="";//4-开始使用webservicetry{firstPortTypetest=(firstPortType)factory.create(service,sayHelloURL);Stringstr=test.getVersion();System.out.println(str);}catch(Exceptione){e.printStackTrace();}}
使用WsGen类生成,具体方法查看用户指南。我们直接使用就可以public
static
voidmain(String[]
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年莆田福建市市直学校新任教师招聘25人(二)备考考试试题及答案解析
- 2025年上饶联考语文真题及答案
- 2025年数据挖掘考试题库及答案
- 2025年四川省交通医院招聘工作人员备考题库及完整答案详解1套
- 2025河南洛阳产融集团有限公司招聘10人笔试参考题库附带答案详解(3卷合一版)
- 吉林大学第二医院2025年聘用制、合同制医疗技术人员招聘备考题库及参考答案详解
- 2025年无锡市第五人民医院公开招聘高端紧缺类专技人才5人备考题库及1套完整答案详解
- 2025年通化县公益性岗位招聘(92人)模拟笔试试题及答案解析
- 2025广东深圳市优才人力资源有限公司招聘聘员(派遣至龙岗街道2507批次)15人笔试参考题库附带答案详解(3卷合一版)
- 2025年宁德市广电传媒有限公司公开招聘工作人员5人备考题库及1套完整答案详解
- (完整文本版)日文履历书(文本テンプレート)
- 国家开放大学《管理英语4》边学边练Unit 5-8(答案全)
- 时尚·魅力-大学生魅商修炼手册智慧树知到期末考试答案章节答案2024年南昌大学
- 《金牌店长培训》课件
- 电工培训触电急救课件
- 宜昌市点军区2023-2024学年七年级上学期期末数学综合测试卷(含答案)
- 井下单项、零星工程管理制度模版
- 道路危险货物运输企业安全生产标准化评价实施细则
- ESD静电防护检测及管控标准
- 卧床病人的护理即翻身技巧课件
- 智能信报箱系统施工方案
评论
0/150
提交评论