在本章我会向大家介绍下jax-ws到底是个什么东西,另外也会用jax-ws做个简单的示例给大家看看。
Java API for XML Web Services (JAX-WS)是Java程序设计语言一个用来创建Web服务的API。 JAX-WS是在
JAX-RPC 1.1的标准上实现的。JAX-RPC是 Java 方面的 Web 服务的原始标准。.
JAX-RPC 1.0 对 Web 服务功能的认识有一定的局限。从其名称可以看出,最初的目的是为了支持使用 XML 的
远程过程调用(Remote Procedure Call,RPC)操作。Java 当时已经有了一项面向 Java 应用程序间的 RPC 调用的现有技术,即
远程方法调用(Remote Method Invocation,RMI)。该规范团队选择了在现有 RMI 接口上对 JAX-RPC 进行建模。只要通过请求-响应操作使用
rpc/enc SOAP,此模型就可相当接近地进行匹配,不过映射到异步操作或其他传输的效果并不理想。到 2003 年底,有关人员认识到,总要对 JAX-RPC 进行大幅修订,以处理这些问题和其他问题,因此 Sun 组成了一个专家组开始进行 JAX-RPC 2.0 规范的开发。
JAX-RPC 2.0 开发工作的主要目标是对各项标准进行更新,以支持 JAX-RPC 1.X 的强制要求(基于 Java 5 特性,如 Annotation 和泛型),改进消息传递支持(包括除 HTTP 外的异步操作和传输),并通过使用 JAXB 2.0 绑定替代 JAX-RPC 1.X 的简单(但局限性很强)内置绑定来改进模式支持。出于对更改范围的强调和其他原因,这个后续标准的名称更改成了 JAX-WS 2.0。
JDK5中提供的是jax-ws 2.0。JDK6中提供的jax-ws 2.1 ,现在jax-ws已经步入2.2版本,JDK7中即可支持。
Java 中的webservice规范:
JAXM&SAAJ (比jax-ws暴露了更多底层的细节,例如可以更灵活的处理SOAP消息)
JAX-WS(JAX-RPC)
JAX-RS(针对
REST(表述性状态转移)式WebService 所制定的规范)
Jax-ws支持的数据类型
1:原始类型(任何Java支持的数据类型,如int);
Java原始数据类型 XML 数据类型
boolean xsd:boolean
byte xsd:byte
short xsd:short
int xsd:int
long xsd:long
float xsd:float
double xsd:double
注意:这里的原始数据类型中没有char类型。
我们知道,在Java语言中,每个原始数据类型都有一个对应的Object类,如int和Integer对应,
但事实上如果它们表示同一个整数时对于XML来说是一样的,所以XML把它们统一对待。
2:标准java类
Java Class XML 数据类型
java.lang.String xsd:string
java.math.BigInteger xsd:integer
java.math.BigDecimal xsd:decimal
java.util.Calendar xsd:dateTime
java.util.Date xsd:dateTime
javax.xml.namespace.QName xsd:QName
java.net.URI xsd:anyURI
(注意:xml时间类型的数据转换成JAVA对象为javax.xml.datatype.XMLGregorianCalendar)
3:由支持的Java类型组成的数组(Array)
JAX-WS支持由JAX-WS支持的数据类型组成的数组。比如int[],String[]等。多维数组同样可以被支持,比如:int[][],String[][]。
另外,byte[] 和 Byte[] 都映射为xsd:base64Binary 类型。
4:异常类
JAX-WS规定Web服务抛出的一样类必须直接或者间接从java.lang.Exception类继承,这个异常必须是可检查的异常(checked Exception),必须不能直接或者间接继承自java.lang. RuntimeException类。
异常和XML数据类型映射:
<complexType name="InvalidPointException">
<sequence>
<element name="message" type="string" nillable="true" />
</sequence>
</complexType>
可以看出,异常类实际上通过string类型来发送的,其实发送的string就是异常的
错误堆栈,在客户端获得XML形式的错误堆栈后,由可以通过这个错误堆栈重新构造一个新的异常类,它和服务端抛出的异常类是等价的。
5:JAX-WS值类型
JAX-WS值类型是能够在客户端和服务端点之间传递的Java类,它被映射为xsd:complexType。JAX-WS值类型必须遵守以下规则:
1:Java类必须提供默认的构造方法;
3:可以实现任何Java接口或者扩展自其它 类;
4:它可以包含公共的、私有的、受保护的字段,并且公共的字段必须是JAX-WS支持的数据类型;
5:Java类可以包含静态或者transient字段;
6:Java类可以包含一些方法;
7:Java类可能被设计成JavaBean。在这种情况下,JavaBean必须依照JavaBeans组件规则,为它的属性提供getter和setter方法;并且JavaBean的属性必须是JAX-WS支持的数据类型。
同时jax-ws还支持以下类型的序列化:
List(ArrayList、LinkedList、Stack、Vector);
Map(HashMap、HashTable、Properties、TreeMap);
Set(HashSet、TreeSet)。
JAX-RPC 1.1为什么会被取代?
JAX-RPC会被舍弃主要是因为它采用的rpc/enc格式来就行SOAP的编码。SOAP 规范中由style与use这两个属性决定SOAP数据的编码样式。 style属性可是两个值中的一个: rpc 或 document 。当属性被设定为文档样式时,客户端使用 XML 模式调用约定;当属性设置成rpc,客户端使用远程过程调用约定。use属性值决定消息的编码方式:可以是encoded或者是 literal。encoded值表示使用Section 5编码(SOAP规范第五章定义的编码)进行xml的序列化和反序列化。Literal值表示根据具体的Schema将内存对象序列化成XML消息。
rpc/enc样式的缺点是耦合度高,跨平台的支持不是很好,另外rpc/enc样式下的SOAP协议栈除了单纯的XML处理之外,还要处理SOAP编码的逻辑,还原多引用的对象图。所以没有doc/lit简单快捷。
因为最近几年rpc/enc遭受了不少质疑和反对声浪。在WS-I 基本概要1.1(WS-I Basic Profile Version 1.1)中,已经禁止使用这种编码样式。WS-I 基本概要1.1要求使用 WSDL SOAP 绑定的 RPC/literal 或 Document/literal形式。WS-I 基本概要禁止对 soap:Envelope 或派生的 soap:Body 元素使用 soap:encodingStyle 属性。因此, RPC/literal 和 Document/literal 是 WS-I 标准唯一支持的 2 种格式。
(有兴趣的同学可以自己详细了解下rpc/enc与doc/lit的区别,在这我只是简单讲下)
Document/literal wrapped
在标准Document/literal 方式下,程序员不得不处理所有的事务,包括基于 XML 的 SOAP 消息的序列化和逆序列化。标准的Document/literal不是面向RPC的,也没有定义与远程调用相关的信息,对仍然酷爱RPC调用的开发者来说无疑是欠缺的,在SOAP工具开发者看来Document/literal标准方式主要是缺乏函数的方法名。
于是微软提出了使用Document/literal模拟RPC的方法调用,定义了一种用特殊的Document/literal使用方法,有名称叫做Document/literal wrapped。其实就是故意在WSDL中定义一个复杂类型complexType节点,该节点的名称与远程调用的方法名相同,该节点把发送的所有参数再封装一层。这样,SOAP的开发工具可以在接受到XML消息的时候根据节点上的方法名将XML消息处理后分发到具体的处理函数中。
这种编码样式,兼顾了Document/literal和RPC的好处,具有更好的跨平台互操作性,目前许多类库都是采用这种方案,例如,大名鼎鼎的XFire。当然,这个方案肯定也有一些问题。
1、 这其实不是真正的RPC样式,方法名不能重载。
2、 WSDL文件比标准的Document/literal要复杂一些。
好了。。蹩脚的理论讲完了。现在做个简单的例子,我之所以选用jax-ws和XFire来做实例是因为myeclipse6.5及其以上版本都自带上面2个框架,非常容易创建项目。而且我觉得关于webservice的框架也不用学太多。因为webservice本身就是为了解决不同程序之间互相调用而产生。你完全可以不必理会你的服务器端或者客户端所用的webservice框架是否和你一样。能够熟练使用一种webservice框架进行webservice项目的开发就可以了。由于内容过长,所以讲示例放在第二小章。请大家谅解。

- 大小: 44.3 KB

- 大小: 93 KB

- 大小: 4 KB

- 大小: 78.7 KB

- 大小: 110.8 KB

- 大小: 14.6 KB
分享到:
相关推荐
- 考虑到Web服务的安全性,JAX-WS支持WS-Security标准,可以实现消息认证、加密和签名。 8. **测试**: - 使用工具如`wsimport`生成客户端代码后,可以编写测试用例来验证服务的正确性。 9. **ws_1文件**: - ...
#### 15.10 小结 通过本章的学习,开发者不仅掌握了使用XFire和MyEclipse开发Web服务的基础知识,还深入了解了Web服务的原理、开发流程和技术要点。无论是创建简单的“Hello World”服务,还是构建复杂的天气预报...
外加热强制循环蒸发器装配图(CAD).rar
数控车床纵向进给系统设计.zip
j
爬虫 bangumi名称和评论数
基于SpringBoot的垃圾分类回收系统,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 首页:浏览垃圾分类回收系统信息。 个人中心:管理个人信息,查看历史记录和订单状态。 运输管理:查看运输信息,垃圾回收的时间和地点。 公告管理:阅读系统发布的相关通知和公告。 垃圾回收管理:查看垃圾回收的信息,回收类型和进度。 垃圾出库申请管理:提交和查看垃圾出库申请的状态。 【管理员功能】 首页:查看垃圾分类回收系统。 个人中心:管理个人信息。 管理员管理:审核和管理注册管理员用户的信息。 用户管理:审核和管理注册用户的信息。 运输管理:监管和管理系统中的运输信息。 公告管理:发布、编辑和删除系统的通知和公告。 垃圾回收管理:监管和管理垃圾回收的信息。 垃圾出库申请管理:审批和管理用户提交的垃圾出库申请。 基础数据管理:管理系统的基础数据,运输类型、公告类型和垃圾回收类型。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术:SpringBoot 三、运行环境 操作系统:Windows、macOS都可以 JDK版本:JDK1.8以上都可以 开发工具:IDEA、Ecplise、Myecplise都可以 数据库: MySQL5.7以上都可以 Maven:任意版本都可以
内容概要:本文档是台湾大学计算机科学与信息工程系2021年秋季学期《算法设计与分析》课程的第一次作业(Homework#1)。作业包含四道编程题和三道手写题,旨在考察学生对算法设计和分析的理解与应用能力。编程题涉及汉诺塔、数组计算、矩形点对、糖果分配等问题;手写题涵盖渐近符号证明、递归方程求解、幽灵腿游戏优化、不公平的卢卡斯问题等。文档详细描述了每个问题的具体要求、输入输出格式、测试用例以及评分标准。此外,还提供了编程技巧和注意事项,如避免延迟提交、正确引用资料、处理大输入文件等。 适合人群:具备一定编程基础的本科生或研究生,特别是修读过或正在修读算法设计与分析相关课程的学生。 使用场景及目标:①帮助学生巩固课堂所学的算法理论知识;②通过实际编程练习提高解决复杂问题的能力;③为后续更深入的学习和研究打下坚实的基础。 其他说明:此作业强调团队合作和个人独立思考相结合的重要性,鼓励学生在讨论后用自己的语言表达解决方案,并注明参考资料。对于编程题,特别提醒学生注意输入文件可能较大,建议采取适当的优化措施以确保程序运行效率。
基于SpringBoot的铁路订票管理系统,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 首页:浏览铁路订票管理系统的主要信息。 火车信息:查看火车的相关信息,包括车次、出发地、目的地和票价等。 公告资讯:阅读系统发布的相关通知和资讯。 后台管理:进行系统首页、个人中心、车票预订管理、车票退票管理等操作。 个人中心:管理个人信息,查看订单历史记录等。 【管理员功能】 首页:查看铁路订票管理系统。 个人中心:修改密码、管理个人信息。 用户管理:审核和管理注册用户的信息。 火车类型管理:管理系统中的火车类型信息。 火车信息管理:监管和管理系统中的火车信息,添加、编辑、删除等。 车票预订管理:处理用户的车票预订请求。 车票退票管理:处理用户的车票退票请求。 系统管理:管理系统的基本设置,公告资讯、关于我们、系统简介和轮播图管理。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术:SpringBoot 三、运行环境 操作系统:Windows、macOS都可以 JDK版本:JDK1.8以上都可以 开发工具:IDEA、Ecplise、Myecplise都可以 数据库: MySQL5.7以上都可以 Maven:任意版本都可以
塑料架注射模具设计.rar
基于json文件数据驱动的的接口测试框架
铁丝缠绕包装机设计-缠绕盘设计.rar
linux
圆柱体相贯线焊接专机工作台设计.rar
硬币分拣机设计.rar
内容概要:本文探讨了开发行业级机器学习和数据挖掘软件的经验与教训,指出当前研究界与工业界之间的脱节问题。作者分享了开发LIBSVM和LIBLINEAR的经验,强调了用户需求的重要性。大多数用户并非机器学习专家,期望简单易用的工具来获得良好结果。文章还详细介绍了支持向量机(SVM)的实际应用案例,包括数据预处理(如特征缩放)、参数选择等步骤,并提出了为初学者设计的简易流程。此外,作者讨论了在设计机器学习软件时应考虑的功能选择、选项数量、性能优化与数值稳定性等问题,强调了软件开发与实验代码的区别以及鼓励研究人员参与高质量软件开发的重要性。 适合人群:对机器学习软件开发感兴趣的科研人员、工程师及从业者,尤其是那些希望了解如何将学术研究成果转化为实际可用工具的人士。 使用场景及目标:①帮助非机器学习专家的用户更好地理解和使用机器学习方法;②指导开发者在设计机器学习软件时考虑用户需求、功能选择、性能优化等方面的问题;③促进学术界与工业界之间的合作,推动高质量机器学习软件的发展。 其他说明:本文不仅提供了具体的开发经验和技巧,还呼吁建立激励机制,鼓励更多研究人员投入到机器学习软件的开发中,以解决当前存在的研究与应用脱节的问题。
一天入门pandas代码
该资源为joblib-0.12.0-py2.py3-none-any.whl,欢迎下载使用哦!
内容概要:本文档《xtuner_requirements.txt》列出了用于支持特定项目(可能是机器学习或深度学习项目)运行所需的所有Python包及其版本。其中不仅包括常见的数据处理和科学计算库如numpy、pandas,还包括了与深度学习密切相关的库如torch、transformers等。值得注意的是,文档中还特别指定了NVIDIA CUDA相关组件的具体版本,确保了GPU加速环境的一致性和兼容性。此外,文档中也包含了从GitHub直接安装的xtuner库,明确了具体的提交哈希值,保证了代码来源的精确性。 适合人群:对机器学习、深度学习领域有一定了解并需要搭建相应开发环境的研发人员,尤其是那些希望复现特定实验结果或基于已有模型进行二次开发的研究者和技术爱好者。 使用场景及目标:①帮助开发者快速搭建完整的开发环境,确保所有依赖项正确无误;②为研究人员提供一个稳定的实验平台,以便于重复实验和验证结果;③作为项目协作的基础,确保团队成员之间的环境一致性,减少因环境差异带来的问题。 阅读建议:由于该文档主要为技术性依赖列表,在阅读时应重点关注所需安装的库及其版本号,特别是CUDA相关组件和自定义库(如xtuner)的安装方式。对于非技术人员而言,可能需要额外查阅相关资料来理解各库的作用。同时,在实际操作过程中,建议按照文档中的顺序逐一安装依赖,避免版本冲突等问题的发生。
j