你真的了解JAVA中与Webservice相关的规范和实现吗?
非常多人在项目中使用Webservice,仅仅是知道怎样公布Webservice,怎样调用Webservice,但真要论其来龙去脉,还真不一定清楚。
一切一切还要从我们伟大的sun公司规范说起。
JAVA 中共同拥有三种WebService 规范,各自是JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS。
以下来分别简要的介绍一下这三个规范。针对JDK 1.6以下版本号,新的还没研究过
(1.)JAX-WS:
JAX-WS(Java API For XML-WebService),JDK1.6 自带的版本号为JAX-WS2.1,其底层支持为JAXB。早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call)眼下已经被JAX-WS 规范代替,JAX-WS 是JAX-RPC
的演进版本号,但JAX-WS 并不全然向后兼容JAX-RPC,二者最大的差别就是RPC/encoded 样式的WSDL,JAX-WS 已经不提供这样的支持。JAX-RPC 的API 从JAVA EE5 開始已经移除,如果你使用J2EE1.4,其API
位于javax.xml.rpc.*包。JAX-WS(JSR 224)规范的API 位于javax.xml.ws.*包,当中大部分都是注解,提供API 操作Web 服务(通常在client使用的较多,因为client能够借助SDK 生成,因此这个包中的API
我们较少会直接使用)。WS-MetaData(JSR 181)是JAX-WS 的依赖规范,其API 位于javax.jws.*包,使用注解配置公开的Web 服务的相关信息和配置SOAP 消息的相关信息。
(2.)JAXM&SAAJ:
JAXM(JAVA API For XML Message)主要定义了包括了发送和接收消息所需的API,相当于Web 服务的server端,其API 位于javax.messaging.*包,它是JAVA EE 的可选包,因此你须要单独下载。
SAAJ(SOAP With Attachment API For Java,JSR 67)是与JAXM 搭配使用的API,为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输,它在server端、client都须要使用。这里还要提到的是SAAJ 规范,其API 位于javax.xml.soap.*包。
JAXM&SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,相比之下JAXM&SAAJ 暴漏了SOAP很多其它的底层细节,编码比較麻烦,而JAX-WS 更加抽象,隐藏了很多其它的细节,更加面向对象,实现起来你基本上不须要关心SOAP 的不论什么细节。那么假设你想控制SOAP 消息的很多其它细节,能够使用JAXM&SAAJ。
(3.)JAX-RS:
JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,因为推出的较晚,该规范(JSR)并未随JDK1.6 一起发行,你须要到JCP
(Java Community Process) 上单独下载JAX-RS 规范的接口,其API 位于javax.ws.rs.*包。
我们做项目,一般不直接面向这些规范,而是使用实现这些规范的框架,如Axis,CXF。我个人比較喜欢CXF,由于我的开发主要是面向JAVA的,并且希望和Spring集成,甚至要和Mule ESB集成,这些方面CXF做的很好。AXIS2在多语言支持方面做得很好(这里的多语言是使用AXIS的语言)。
对AXIS没有太大发言权,由于用得少,这里还是说一点关于CXF的吧。(參考官方文档)
Apache CXF is an open source services framework.CXF helps you build and develop services
using frontend programming APIs, likeJAX-WS and JAX-RS. These services can speak a variety of protocols such asSOAP, XML/HTTP, RESTful HTTP, or CORBA and work over a variety of transportssuch as HTTP, JMS or JBI.
假设你想在maven中使用cxf,那么要在pom中声明maven依赖。
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-distribution-manifest</artifactId>
<version>2.5.9</version>
<scope>provided</scope>
</dependency>
经測试,调用Webservice,仅仅须要引这一个就够了,它会间接引入一些其它jar
最后说下,Cxf_home 2.5.9版本号的lib下jar的作用:
The following jars are required for all CXFusage:
- cxf.jar
- commons-logging.jar
- geronimo-activation.jar (Or the Sunequivalent) [6]
- geronimo-annotation.jar (Or the Sunequivalent) [6]
- geronimo-javamail.jar (Or the Sunequivalent) [6]
(MAY be able to remove javamail if you don't use any MTOM/SAAJ typethings)
- geronimo-stax-api.jar (Or the Sunequivalent) [6]
- neethi.jar
- jaxb-api.jar [6]
- jaxb-impl.jar (this is a [6] for normalruntime, but is required for
tooling and the dynamicclients)
- XmlSchema.jar
- woodstox-core-asl.jar [6] or another StAX implementation
- stax2-api-3.0.1.jar [6] for woodstoxabove
- wsdl4j.jar
The following jars are required for XMLcatalog support:
- xml-resolver.jar
For Java2WSDL and WSDL2Java:
- The above jars
- jaxb-xjc.jar
- velocity.jar
- commons-collections.jar
- commons-lang.jar
- cxf-xjc*.jar (optional, these are xjcextensions for providing enhanced
JAXB code generation)
For JAX-WS support:
- geronimo-ws-metadata.jar [6]
- geronimo-jaxws_2.2_spec-1.0.jar (Or theSun equivalent) [6]
- saaj-api.jar [6]
- saaj-impl.jar [6]
- asm.jar (semi-optional, helps withperformance of wrapper types and is
required when adding JAXB annotations onto the SEI methods and
parameters.)
For XML Configuration support:
- aopalliance.jar
- spring-beans.jar
- spring-context.jar
- spring-core.jar
- spring.web.jar
- FastInfoset.jar
For standalone HTTP support:
- geronimo-servlet.jar
- jetty-*.jar
- sl4j.jar & sl4j-jdk14.jar (optional -but improves logging)
For Aegis support:
- jdom.jar (optional, if you want to mapxsd:anyType to JDOM)
For XmlBeans databinding support:
- xmlbeans.jar
For WS-Security support:
- bcprov-jdk15.jar
- xalan.jar
- serializer.jar
- wss4j.jar
- xmlsec.jar
- ehcache-core.jar
For SAML support in WS-Security
- joda-time.jar
- opensaml.jar
- openws.jar
- xmltooling.jar
For HTTP Binding support:
- jra.jar
- jettison.jar (Needed for JSON servicesonly)
For JAX-RS support:
- abdera* (optional: for AtomPub support, but also needed for the
Management log browser console)
- commons-codec.jar (Needed for Abdera)
- jaxen.jar (Needed for Abdera)
- axiom* (Needed for Abdera)
- jsr311-api.jar
- jettison.jar (Needed for JSON servicesonly)
- oauth*.jar (Needed for OAuth support)
For JMS transport
- geronimo-jms.jar (Or the Sun equivalent)
- spring-jms.jar
- spring-tx.jar
For CORBA support:
- antlr.jar
For JavaScript functionality:
- js.jar
For schema validation with the Aegis databinding.
-msv-core.jar (version 2010.1)
-xsdlib:jar (version 2010.1)
-isorelax.jar (version 20030108)
-relaxngDatatype.jar (version 20020414)
For the WS-Notification Service:
-cxf-services-wsn-api.jar
-cxf-services-wsn-core.jar
For the CXF Security Token Service:
- cxf-services-sts-core.jar
人家官方文档,写得那么好,我就不再嚼舌头了,大家去官网看吧。
了解了java Webservice这块的规范和实现,相信你再次在java中使用Webservice就不会那么糊涂了,该怎么做,出了问题怎么办,心中有数了吧。
你真的了解JAVA中与Webservice相关的规范和实现吗?的更多相关文章
- Java中Date各种相关用法
Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- [转]java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- Java内存管理-你真的理解Java中的数据类型吗(十)
勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 作为Java程序员,Java 的数据类型这个是一定要知道的! 但是不管是那种数据类型最 ...
- Java中SMB的相关应用
目录 SMB 服务操作 Ⅰ SMB简介 Ⅱ SMB配置 2.1 Windows SMB Ⅲ 添加SMB依赖 Ⅳ 路径格式 Ⅴ 操作共享 Ⅵ 登录验证 SMB 服务操作 Ⅰ SMB简介 SMB(全称 ...
- 你真的了解JAVA中对象和类、this、super和static关键字吗
作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 目录 Java对象究竟是什么? 创建对象的过程 ...
- java中数组的相关知识
1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3)int[]ags={1,2,3,4,5}; 4)int[ ...
- Java中初始化的相关问题
目录 局部变量的初始化 成员变量的初始化 构造器初始化 静态数据的初始化 总结 已经快半个月没写博客了,这周在看 Thinking in Java 这本书,准备将书中的第五章和第七章的内容整合一下,写 ...
- 你真的知道Java中boolean类型占用多少个字节吗?
为什么要问这个问题,首先在Java中定义的八种基本数据类型中,除了其它七种类型都有明确的内存占用字节数外,就boolean类型没有给出具体的占用字节数,因为对虚拟机来说根本就不存在 boolean 这 ...
随机推荐
- 知识点1-3:MVC设计模式
MVC代表模型-视图-控制器(Model-View-Controller),起源于20世纪70年代的Smalltalk开发社区,2003年起随着Ruby on Rails的出现才在Web上流行使用. ...
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇]
原文:WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[元数据描述篇] 在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy.WS-Tra ...
- Win32 Windows编程 十二
一.对话框 1.对话框的分类 2.对话框的基本使用方式 3.对话框资源 4.有模式对话框的使用 5. 无模式对话框的使用 5.1 加入对话框资源 5.2 定义窗体处理函数 BOOL CALLBACK ...
- UITabBarController中自定义UITabBar
1.创建多个视图控制器,放如UITabBarController中 AViewController *aa = [[AViewController alloc] init]; UINavigation ...
- Swift - iOS中各种视图控制器(View Controller)的介绍
在iOS中,不同的视图控制器负责不同的功能,采用不同的风格向用户呈现信息.下面对各个视图控制器做个总结: 1,标准视图控制器 - View Controller 这个控制器只是用来呈现内容.通常会用来 ...
- poll调用深入解析
poll调用深入解析http://blog.csdn.net/zmxiangde_88/article/details/8099049 poll调用和select调用实现的功能一样,都是网络IO利用的 ...
- 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox
原文 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox 很久没自己写写心得日志与大家分享了,一方面是自己有点忙,一方面是自己有点懒,没有及时总结.因为实践是经验的来源,总结 ...
- 在windows下如何配置RTT开发环境?
之前一直使用MDK查看和编译RTT的源码,这几天无聊想起RTT官方提供使用scons工具编译RTT,因此想试试这种方法,做下此笔记,以供入门者参考. 注 1 下载安装Python2.7 论坛中很多人说 ...
- POJ 3892 RSA Factorization
题目地址:http://poj.org/problem?id=3892 题目大意:RSA分解. 这儿的N比较大,要用高精度,如果一般的肯定分解不了,但是这儿有一个限制 |q-kp|<=10000 ...
- 8天玩转并行开发——第二天 Task的使用
原文 8天玩转并行开发——第二天 Task的使用 在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于 “任务的编程模型”所冲击, ...