




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
java6原生jws应用作者:徐骏java6自带了javax.jws包,通过annotation提供了对webservice原生支持,即在java6下如无特殊要求,一般不需要axis之类的框架就可以进行webserivce开发。同时java6提供了webserivce运行宿主,实现了一个内置的轻量级soap服务器,我们可以把webservice部署到java平台中,并进行简单的测试,不需要web服务器(如tomcat)就能提供webservice服务测试。webservice传输的自定义对象的属性必须是public的。 必须有默认构造函数。webservice也必须要有默认构造函数。第一个例子下面我们全手工用记事本写一个简单的webservice例子。实体类studentstudent.javapackage com.xujun.entity;public class student private string studentname; private int studentid ; private int age ; public string getstudentname() return studentname; public void setstudentname(string studentname) this.studentname = studentname; public int getstudentid() return studentid; public void setstudentid(int studentid) this.studentid = studentid; public int getage() return age; public void setage(int age) this.age = age; webservice类studentmanager.javapackage com.xujun.service;import com.xujun.entity.student;import javax.jws.webmethod;import javax.jws.webservice;import javax.jws.soap.soapbinding;/*通过annotation方式实现webservicetargetnamespace属性定义了自己的命名空间,servicename则定义了标签和标签的name属性*/webservice(name=studentservice,targetnamespace= , servicename = studentmanager)/*soap绑定方式,默认是document wrapped方式*/soapbinding(style=soapbinding.style.rpc)public class studentmanager webmethod public student getstudent(int studentid) student student = new student(); student.setstudentid(1001); student.setstudentname(张威); student.setage(17); return student; 服务发布类通过jdk6发布webservice。main.javapackage jaxws;import com.xujun.service.studentmanager;import javax.xml.ws.endpoint;public class main public static void main(string args) /* endpoint是发布提供类*/ endpoint endpoint = endpoint.publish(:1010/myservice, new studentmanager(); system.out.println(服务已经启动 :1010/myservice); 编译java文件我在d盘下建了一个aa的目录,然后将这三个java文件都放入,然后通过命令行集体编译。集体编译命令是:javac d . *.java编译之后的目录结构如下图启动webservice服务直接运行main.class就可以了。查看wsdl文件使用浏览器(如ie),输入以下url::1010/myservice?wsdl应该可以看到studentmanager的wsdl文件了。生成客户端stub注意,上面启动的web服务不要停止。使用jdk6自带的wsimport工具(在jdk6安装目录的bin目录下可以找到)为发布的wsdl生成客户端的存根及框架文件。我们先在aa目录下创建一个client目录,这个目录用来存放wsimport生成的stud类,在client目录下建一个src,用来存放生成stud的java文件。wsimport命令参数主要有:-d 生成客户端执行类的class文件的存放目录 -s 生成客户端执行类的源文件的存放目录 -p 定义生成类的包名。如果不定义package,默认使用namespace的信息生成package。我的命令如下:wsimport -d client -s clientsrc -p com.xujun.client :1010/myservice?wsdl注意自己手工写,不要copy到dos窗口,符合会不正确的编写客户端import com.xujun.client.*;public class client public static void main(string args)/webservice中的servicename studentmanager manager = new studentmanager();/webservice中的namestudentservice service = manager.getstudentserviceport(); student student = service.getstudent(1); system.out.println(student.getstudentname(); 异步调用首先编写一个xml文件,名字随便起。我起的名字是:custom-client.xml. true 注意wsdllocation要修改成你真实的路径。然后控制台命令如下:wsimport -d client -s clientsrc -p cn.simlink.webservice.ks.client http:/localhost:8080/ksdatauploadwebservice/dataupload?wsdl -b clientcustom-client.xml通过“-b clientcustom-client.xml”指明生成异步调用的stub。服务端是不用作任何改变的。在tomcat下部署jax-ws首先需要下载jax-ws的jar包,放置到lib下,然后编写sun-jaxws.xml 然后在web.xml中增加 com.sun.xml.ws.transport.http.servlet.wsservletcontextlistener wsservletcom.sun.xml.ws.transport.http.servlet.wsservlet1 wsservlet/dataupload 调用方式(rpc,document)与wsgen工具我们在studentmanager中有这样的注解。soapbinding(style=soapbinding.style.rpc)这表明studentmanager中使用的是rpc方式的soap绑定我们通过:1010/myservice?xsd=1查看该wsdl的xsd 发现xsd中只包含student的定义,rpc绑定的xsd中只定义了复杂类型元素,对基本类型元素没有定义,这样就导致了无法验证交换消息的xml文档是否符合xsd规范。下面我们看两种document方式的soap绑定:bare和wrappedbarewebservice(name = studentservice, targetnamespace = , servicename = studentmanager)soapbinding(style=soapbinding.style.document,parameterstyle=soapbinding.parameterstyle.bare)public class studentmanager webmethod public student getstudent(int studentid) /模拟代码 student student = new student(); student.setstudentid(1001); student.setstudentname(张威); student.setage(17); return student; 编译:javac d . studentmanager.java运行之后看wsdl,style从rpc变成了document: 需要注意的是,document绑定方式只能有一个参数,因为document形式的服务要求的输入是“一个文档”,而不是一个带方法名和相应参数的请求。这就意味着在document风格中,我们应该传入一个对象,这个对象将是web服务的唯一输入。document中会包含服务调用的所有有用信息,但不是方法名及其相应参数值的组合,这就是ws-i为什么只允许document只能包含一个根元素的原因。如果使用bare方式的document。那么就将多个参数包装成一个对象。wrappedwrapped也是document方式的一种,同时它是jaxws的默认方式,它允许服务端编程的时候有多个参数,实际上,它是对方法名和参数进行wrapped封装,产生一个新对象,该对象的名称正好和方法名一致。这个封装过程是通过wsgen工具实现的。注意wrapped一定要用wsgen工具生成sei,否则无法启动服务。wsgen cp . s . com.xujun.service.studentmanager这样就为studentmanager生成带source源码的sei。然后还是运行main类。ps:rpc和bare如果有exception或者自定义的exception,那么也是要用wsgen生成sei的。命令工具wsgen wsgen 是在jdk的bin目录下的一个exe文件(windows版),该命令的主要功能是用来生成合适的jax-ws。它读取web service的终端类文件,同时生成所有用于发布web service所依赖的源代码文件和经过编译过的二进制类文件。这里要特别说明的是,通常在web service bean中用到的异常类会另外生成一个描述bean,如果web service bean中的方法有申明抛出异常,这一步是必需的,否则服务器无法绑定该对像。此外,wsgen 还能辅助生成wsdl和相关的xsd文件。wsgen 从资源文件生成一个完整的操作列表并验证web service是否合法,可以完整发布。 命令参数说明:u -cp 定义classpath u -r 生成 bean的wsdl文件的存放目录 u -s 生成发布web service的源代码文件的存放目录(如果方法有抛出异常,则会生成该异常的描述类源文件) u -d 生成发布web service的编译过的二进制类文件的存放目录(该异常的描述类的class文件) 命令范例: wsgen -cp ./bin -r ./wsdl -s ./src -d ./bin -wsdl org.jsoso.jws.server.example wsimport wsimport也是在jdk的bin目录下的一个exe文件(windows版),主要功能是根据服务端发布的wsdl文件生成客户端存根及框架,负责与web service 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。对java而言,wsimport帮助程序员生存调用web
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新型城镇化建设项目房场地租赁合同范本
- 2025年度智能车间租赁服务合同范本
- 2025年度能源设备监造服务合同范本
- 2025年度消费信贷担保合同代理服务条款
- 2025年城市综合体玻璃幕墙安装与检修承包合同
- 2025年房建泥工班组劳务分包及建筑废弃物填埋场建设合同
- 2025年度房产买卖合同范本(含违约金计算)
- 2025年度旅游行业实习生就业协议
- 2025版跨国自愿离婚合同示范文本
- 2025年度旅游景点场地租赁专项合同
- 餐饮区域保护合同范本
- 美容院股权分配协议书
- 医院药物使用流程及监控机制
- 绿化工程挂靠合同协议
- 2025年消防设施操作员(中级)职业技能鉴定参考试题库(500题含答案)
- 2025年交管12123驾驶证学法减分题库(含答案)
- ISO27001:2022信息安全管理体系全套文件+表单
- 2024年一级注册结构工程师专业考试试题及答案(下午卷)
- 环境保护与水土保持监理实施细则
- 顾问项目进驻与退出管理办法
- 2025年部编版小学二年级语文上册全册教案
评论
0/150
提交评论