你真的了解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相关的规范和实现吗?

时间: 2024-09-30 02:42:03

你真的了解JAVA中与Webservice相关的规范和实现吗?的相关文章

Java中Date各种相关用法

Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0 int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数 注:在使用set方法之前,必须

[转]java中的字符串相关知识整理

字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果写过C/C++的应该就了解,在字符串的操作上会有许多操作的函数与类,用于简化代码的开发.一方面是因为字符串在代码中会频繁用到,另一方面是因为字符串的操作非常麻烦. 最初我知道String的特殊待遇就是在delphi中,因为String在delphi里是一个关键字存在,与其他的基本类型是不一样的.那时

Java中SMB的相关应用

目录 SMB 服务操作 Ⅰ SMB简介 Ⅱ SMB配置 2.1 Windows SMB Ⅲ 添加SMB依赖 Ⅳ 路径格式 Ⅴ 操作共享 Ⅵ 登录验证 SMB 服务操作 Ⅰ SMB简介 ? SMB(全称是Server Message Block)是一个协议名,它能被用于Web连接和客户端与服务器之间的信息沟通.SMB协议作为一种局域网文件共享传输协议,常被用来作为共享文件安全传输研究的平台. ? Windows操作系统都包括了客户机和服务器 SMB协议支持.Microsoft 为 Internet

java中数组的相关知识

1. 2.数组的命名方法 1)int[]ages=new int[5]; 2) int[]ages; ages=new int[5]; 3.java不支持不同类型的重名数组 4.java中数组的循环赋值 1 package dierge; 2 3 public class Shuzu { 4 5 public static void main(String args[]){ 6 int[]ags=new int[5]; 7 int i; 8 for(i=0;i<ags.length;i++){

Java中使用webservice,简化开发(xfire的webservice)

首先,使用到的jar先导入项目中, xbean-spring-2.8.jar, wsdl4j-1.6.1.jar, commons-httpclient-3.0.jar, commons-codec-1.3.jar, xfire-all-1.2.6.jar, xmlschema-1.1.jar, spring-1.2.6.jar, commons-logging-1.0.4.jar, jdom-1.0.jar, 这9个包是xfire实现服务器端的webservice主要的包,包含访问webser

Java中获取系统相关信息——sigar

一.sigar简介 sigar中文名是系统信息收集和报表工具,是一个开源的工具,提供了跨平台的系统信息收集的API,可以和绝大多数操作系统和大多数版本打交道,可以收集的信息包括: 1.操作系统的信息,包括:dataModel.cpuEndian.name.version.arch.machine.description.patchLevel.vendor.vendorVersion.vendorName.vendorCodeName 2.CPU信息,包括:基本信息(vendor.model.mh

java中IO流相关知识点

package zdbIO; import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream; public class OutputStreamDemo1 { /**     * @throws IOException      * @throws IOException

Java中的http相关的库:httpclient/httpcore/okhttp/http-request

httpclient/httpcore是apache下面的项目:中文文档下载参考 5 官网:http://hc.apache.org/ 在线文档:http://hc.apache.org/httpcomponents-client-ga/tutorial/html/ 示例代码:http://hc.apache.org/httpcomponents-client-ga/examples.html 异步版本:http://hc.apache.org/httpcomponents-asyncclien

POI开发:Java中的Excel相关操作

一.Apache POI 1.简介: Apache POI支持大多数中小规模的应用程序开发,提供API给Java程序对Microsoft Office格式档案读和写的功能,呈现和文本提取是它的主要特点. 2.结构: HSSF: 提供读写Microsoft Excel XLS格式档案的功能. XSSF: 提供读写Microsoft Excel OOXML XLSX格式档案的功能. HWPF: 提供读写Microsoft Word DOC格式档案的功能. HSLF: 提供读写Microsoft Po