




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Weblogic Server 8.1 ant工具开发Web Service时间:2005-10-19作者:老Z浏览次数: 7786 本文关键字:WebLogic Server, Web Services, Web服务,Ant文章工具推荐给朋友打印文章前言:本文不是专门讲述Web Service技术的,读者在阅读本文之前需要具备一定的SOAP和Web Service知识基础,同时对Weblogic Server的使用也应该熟悉。如果要自己动手实践本文的例子,就需要安装Weblogic Server 81,尽管本文是以weblogic server 81为测试环境,但是针对weblogic server 7下也是差不多的。本文只是起个抛砖引玉的作用,如果想深入研究Web Service的开发,还需要参考、学习相关的资料,包括Weblogic Service的相关文档。一、概述在JBuilder中也支持开发基于weblogic的web service,不过实际上在JBuilder下开发web service也是基于ant任务来生成和构造web service的。但是,当初笔者在一个项目中使用JBuilder下自动生成构造ant脚本生成的web service时碰到了一个问题,通过JBuilder生成的web service,如果你的web service调用接口中存在一个或者多个String类型参数的时候,在生成的wsdl文件中对该接口的参数命名不会按照你的后端组件对应方法中参数的 名字,而是以string、string0、string1等形式命名的。而在那个项目中需要在Delphi环境中调用web service,问题就出现了,string在Delphi中是关键词,产生了冲突,不能进行调用。于是笔者决定采用自编写ant脚本的方式来生成和构造 web service来解决前面所述Delphi调用的问题。BEA Weblogic提供了一些Ant任务,用来帮助开发者生成、构造一个Web服务的重要部件,(例如:序列化类、客户端jar支持库、以及web- services.xml描述文件),并且把一个Weblogic Web 服务的所有部分打包成一个可部署的EAR文件。BEA Weblogic所提供的Web服务Ant任务,支持从实现了Web Service接口的普通JAVA源文件和EJB jar生成Web Service部件,也支持从WSDL描述文件生成,同时支持基于http/https传输协议和JMS传输协议的Web Service。在这一节我们只讲述通过基于一个普通JAVA类作为后端组件来实现的Web Service,传输协议使用http(基于https的方式将在后述关于Web Service安全的部分讲述)。二、使用Weblogic ant工具生成Web Service我们先建立D:wls_ws_demo的工作目录,在此目录下分别建立src、build、ddfiles、webapp、test目录。具体用途后文会涉及到。首先我们编写一个实现了两个Web Service接口的普通JAVA类: package com.wnetw.ws.demo;public class HelloWorldWS public String sayHello()return Hello World!; public String welcome(String name)return Hello + name + ,Welcome to WebService!; 上面两个方法就不需要解释了,很简单。把此类按封装包一致的路径放置在src目录下。下面是本示例中ant脚本文件内的属性设置: 上面的属性应该不是很难理解,关键的是对于bea weblogic server安装目录和构造生成文件的路径说明,其次是对classpath的设置,需要用到的两个weblogic库是weblogic.jar和webservices.jar。接着我们看看我们在本节中使用的Weblogic提供的Ant任务:1、source2wsddsource2wsdd Ant任务最基本的功能是根据我们编写的普通JAVA类源文件生成一个Web Service所必需的两个部件:web-services.xml和.wsdl描述文件。下面是针对上面HelloWorldWS.java对应的Ant脚本: 属性说明javaSource:指定web service的实现后端组件,这里是普通JAVA类com.wnetw.ws.demo HelloWorldWS.java。注意属性里面是对源文件目录路径设置,而不是包路径。ddFile:生成的web service部署描述符文件web-services.xml的存放路径。wsdlFile:生成的.wsdl文件存放的路径和名字。serviceURI:客户应用程序调用此Web服务的URL中的Web Service URI部分。注意:必须以“/”开头。例如:/ HelloWorldWS 。同时这个URI属性也会成为生成的web-services.xml 部署描述符文件中元素的uri属性。例如:本机访问本web service例子的url是http:/localhost:7001/ WSDemo/ HelloWorldWS上面的serviceURI属性就指定了上述url中的/ HelloWorldWS这一部分。2、clientgenclientgen可以用来生成JAVA环境下客户端应用调用一个Web Service客户端jar支持库。可以通过wsdl文件来生成,也可以通过一个包含web service实现的ear文件来生成。下面是clientgen ant任务的脚本示例: 这里采用从前面source2wsdd任务生成的wsdl文件来生成客户端jar支持库。通过wsdl属性指定。3、war这是ant提供的标准任务,这里与其他普通的war包有一点区别是,需要把web-services.xml文件打包到war中去。说明:需要准备web.xml,后面对于安全设置的时候还需要weblogic.xml文件,这里先都打包进去,这些文件都需要提前编辑准备好:-Web.xml- wsdl text/xml -weblogic.xml-这个文件没设置,在后面关于安全的处理里面需要这里配置角色映射。下面是war ant脚本示例: 4、ear这也是ant标准任务,需要注意的是必须提前编写application.xml文件,下面针对本文例子的application.xml文件: HelloWorldWS.war WSDemo 说明:context-root元素指定此Web Service所在Web应用的应用根。例如:本机访问本web service例子的url是http:/localhost:7001/WSDemo/ HelloWorldWS上面的context-root元素就指定了上述url中的WSDemo这一部分。下面是本文例子的ear ant任务脚本: 核心的ant任务说明完了,下面是完整的ant脚本文件:- build_wls_all.xml- 运行ant生成Web Service:打开命令行窗口,转到工作目录D:wls_ws_demo下,在此目录下先运行D:beaweblogic81serverbin setWLSEnv.cmd(此cmd文件具体路径与你的weblogic platform81实际安装目录相关)进行环境设置,然后运行:D:beaweblogic81serverbinant.bat -buildfile build_wls_all.xml。运行结束,出现“BUILD SUCCESSFUL”,那就代表OK了。转到工作目录下的build目录,你就会看到HelloWorldWS.ear这个文件。三、测试Web Service本节将讲述对前一节里生成的Web Service HelloWorldWS进行测试。启动Weblogic Server,进入Weblogic Server控制台,在Deployments-Applications下部署上节生成的HelloWorldWS.ear。1、通过Weblogic自动生成的测试主页测试部署成功后,在浏览器中输入http:/localhost:7001/WSDemo/HelloWorldWS访问Weblogic Server默认生成的上述HelloWorldWS Web Service的测试主页。如下图: 图上列出了HelloWorldWS Web Service上的两个方法:welcome和sayHello。点击welcome连接进入wecome方法的测试页,如下图: 在上述页面输入“老Z”,提交后就会看到如下图页面: 测试的结果跟上节中的HelloWorldWS.java实现此方法的结果是一样的。测试sayHello方法跟上面过程一样。在测试主页中还能看到在JAVA环境下,基于clientgen ant任务生成的jar客户端stub支持库调用此HelloWorldWS Web服务的代码示例。2、使用JAVA程序调用Web Service下面实际编写一个java测试程序来调用上述Web Service。 - HelloWorldWSTest.java -import com.wnetw.was.demo.client.*;public class HelloWorldWSTest public static void main(String args) try HelloWorldWS_Impl ws = new HelloWorldWS_Impl(http:/localhost:7001/WSDemo/HelloWorldWS?WSDL); HelloWorldWSPort port = ws.getHelloWorldWSPort(); System.out.println(port.welcome(“老Z”); catch(Exception e) e.printStackTrace(); System.out.println(e); 编译、运行上述测试程序的时候首先需要weblogic客户端webservice支持库webserviceclient.jar,还需要前 面clientgen ant任务生成的jar客户端stub支持库HelloWorldWS_clients.jar。在下面的编译、运行测试程序的ant脚本中可以看到在 classpath中引入了上述两个jar。编译、运行测试程序的ant脚本如下: 运行上述ant脚本后,如果成功的话,应该得到类似下图结果: 3、在VB下调用Web Service下面我在VB环境下来调用下这个Web Service,笔者使用的是Visual Basic 6.0,要在VB下调用Web Service需要先安装Microsoft SOAP toolkit。新建一个VB工程,然后把Microsoft Soap Type Library引用进来,如下图: 新建一个form1,添加一个按钮command1,在form1源代码窗口中整个拷贝如下代码:Dim soap As MSSOAPLib.SoapClientPrivate Sub Command1_Click()MsgBox soap.sayHello()MsgBox soap.welcome(老Z)If Err 0 Then MsgBox Web Service调用失败: + Err.DescriptionEnd IfEnd SubPrivate Sub Form_Load()Set soap = New MSSOAPLib.SoapClientOn Error Resume NextCall soap.mssoapinit(http:/localhost:7001/WSDemo/HelloWorldWS?WSDL)If Err 0 Then MsgBox 初始化SOAP失败: + Err.DescriptionEnd IfEnd Sub然后运行工程,点击窗口上的按钮就开始调用前面部署的Web Service(确保Weblogic Server在运行中),成功的话会得到如下图的两个MessageBox: 四、使用非内建数据类型前面例子中的Web Service方法中使用的参数和返回值都是String,类似String,int等数据类型是属于Weblogic web service所支持的内建类型,关于Weblogic web service所支持的内建数据类型请参见:/wls/docs81/webserv/implement.html#1054236所支持的XML非内建类型请参见:/wls/docs81/webserv/assemble.html#1060805所支持的Java非内建数据类型请参见:/wls/docs81/webserv/assemble.html#1068595WebLogic Server能够对内建数据类型进行XML与Java表示之间的转换。但是,如果你在web service操作中使用了非内建数据类型,那么你必须提供以下信息,以确保weblogic server能够正确地进行转换。 用于处理数据的Java表示与XML之间的转换的序列化类; 包含了数据类型Java表示的Java类; 数据类型的XML Schema表示; web-services.xml部署描述文件中的数据类型映射信息。Weblogic Server中带有servicegen和autotype Atn任务,这两个任务通过对web service的无状态EJB或者Java类后端组件的内省,从而自动生成上述部件。上述Ant任务能够处理许多非内建数据类型,所以大多数的开发者并不 需要手工生成上述的部件。有时,你可能也需要手工去创建非内建数据类型部件。因为你的数据类型可能很复杂,以致Ant任务不能正确生成前述部件。你也可能想要自己控制数据在XML和Java表示之间的转换过程,而不依赖Weblogic Server所使用的缺省转换程序。本节将演示在Weblogic web service中如何处理非内建(自定义)的数据类型。我们先编写一个数值Bean类UserInfo,如下: package com.wnetw.ws.demo;import java.util.*;public class UserInfo private Integer userid; private String username; private String sex; private Date birthday; private int level; private double salary; private telcodes list; public UserInfo() public Integer getUserid()return userid; public void setUserid(Integer userid)this.userid = userid; public String getUsername()return username; public void setUsername(String username)this.username = username; public String getSex()return sex; public void setSex(String sex)this.sex = sex; public Date getBirthday()return birthday; public void setBirthday(Date birthday)this.birthday = birthday; public int getLevel()return level; public void setLevel(int level)this.level = level; public double getSalary()return salary; public void setSalary(double salary)this.salary = salary; public List getTelcodes()return telcodes; public void setTelcodes (List telcodes)this. telcodes = telcodes; 在前文中的后端组件类HelloWorldWS.java中增加一个方法:public UserInfo getUserInfo(Integer userid)UserInfo userinfo = new UserInfo();userinfo.setUserid(userid);userinfo.setUsername(李泽林);userinfo.setSex(男);userinfo.setBirthday(new Date();userinfo.setLevel(2);userinfo.setSalary(1000.51);List telcodes = new ArrayList();telcodes.add(123);telcodes.add(321);userinfo.setTelcodes (telcodes); return userinfo; 在这个方法里,返回值是UserInfo,这是我们前面定义的数值Bean,由于这是非内建类型,而且也不属于受支持的非内建类型,所以需要我们必须自己来处理XML和UserInfo Java表示数据类型之间的转换。在本文的例子中,我们使用Weblogic Server的autotype任务来做这件事情。我们先在build目录建一个autotype目录,然后在前文中ant完整脚本中的compile任务之后增加下述脚本: autotype Ant任务有几个常用属性,下面简要说明下:javatypes:需要进行类型转换的非内建(自定义)数据类型java类,注意取值是全限定类名,不需要带上java或者class扩展名。如果存在多个这样的数据类型类,用逗号“,”隔开;targetNamespace:在对数据类型映射到XML的时候使用的命名空间;packageName:生成的序列化相关类的封装包;destDir:生成的序列化相关类存放的目录;keepGenerated:是否保留中间java源文件,取值为:true或者false。关于autotype任务的详细信息请参考:/wls/docs81/webserv/anttasks.html#1080062上述ant任务成功运行后就会生成build/autotype/目录下生成types.xml文件以及按包封装的数据转换类的源文件和class文件。由于增加了自定义数据类型,所以我们还得更新source2wsdd任务脚本,以下是增加了自定义数据类型处理后的source2wsdd任务脚本: 跟以前的脚本相比,增加了typesInfo属性来指定自定义数据类型的XML描述文件。增加了对自定义数据类型支持后的完整脚本请参考本文代码下载文件。按照第一节所述方法运行ant脚本build_wls_all.xml后,再部署buildapplications目录下的HelloWorldWS.ear。就可以按照以前说的方法进行测试了。这一次在Weblogic Server自动生成的web service测试主页:http:/localhost:7001/WSDemo/HelloWorldWS可以发现多了一个叫getUserInfo的方法连接,进入此方法的调用测试页面,调用此方法后就可以看到此web service方法的调用结果,以下是结果截图: 从调用测试结果页面可以看到,这一次的Return Value是:com.wnetw.ws.demo.UserInfo82d235这正是我们的web service方法返回值类型类型的一个对象,图中的下面也以SOAP消息的形式描述了调用的输入和返回结果。我们接着修改测试类HelloWorldWSTest.java,如以下: import com.wnetw.ws.demo.client.*;import com.wnetw.ws.demo.UserInfo;public class HelloWorldWSTest public static void main(String args) try HelloWorldWS_Impl ws = new HelloWorldWS_Impl(http:/localhost:7001/WSDemo/HelloWorldWS?WSDL); HelloWorldWSPort port = ws.getHelloWorldWSPort(); System.out.println(port.sayHello(); System.out.println(port.welcome(老Z); System.out.println(开始测试自定义数据类型的返回值。); UserInfo info = port.getUserInfo(100); System.out.println(info); System.out.println(info.getUsername(); catch(Exception e) e.printStackTrace(); System.out.println(e); 看看以下代码好像有点问题,UserInfo info = port.getUserInfo(123);我们在HelloWorldWS.java类中定义的对应方法是getUserInfo(Integer userid),参数是Integer的,但是上述测试类代码中却使用int类型,这是正确的。我们可以把clientgen任务中的 keepGenerated属性设为true,把自动生成的java源代码保留下来,build成功后,我们打开buildclientslib目录下 HelloWorldWS_clients.jar文件中的 com.wnetw.ws.demo.client.HelloWorldWSPor.java源文件,可以看到如下代码:pac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025二手商品交易合同
- 2025建筑工程合同的补充协议范本
- 《服务创新》课件 - 探索与实践的结晶
- 《赵六高血糖》课件
- 杭州互联网产业报告
- 公关程序之实施与评估
- 人教部编版九年级上册第8课 西欧庄园教案配套
- 四川应用技术职业学院《数字图像处理》2023-2024学年第二学期期末试卷
- 沈阳职业技术学院《消费经济学》2023-2024学年第二学期期末试卷
- 梧州学院《和声Ⅰ》2023-2024学年第二学期期末试卷
- Unit 9 Active learning 教学设计-2023-2024学年高中英语北师大版(2019)必修第三册
- 渔场基地建设实施方案
- 2025上海无固定期限劳动合同范本
- 城市道路养护雨季应对措施
- 中职高教版(2023)语文职业模块-第五单元:走近大国工匠(一)展示国家工程-了解工匠贡献【课件】
- 《食源性病原体》课件
- 《药品泡罩包装应用指南(征求意见稿)》
- 2025年湖南怀化市城市管理和综合执法局局属事业单位招聘历年高频重点提升(共500题)附带答案详解
- 2025年国家电投集团招聘笔试参考题库含答案解析
- GB 17681-2024危险化学品重大危险源安全监控技术规范
- 福建省能源石化集团有限责任公司招聘笔试冲刺题2024
评论
0/150
提交评论