本文根据SUN官方网站Enterprise Java Technologies Tech Tips栏目上的一篇文章改写的,所有过程均调试通过。
一.前言
SOA思想的核心在于"S",凡是从服务的角度去看待系统功能,并且构建和实现应用,都可以认为是SOA的某种实现形式。下面一段要说的是:SOA技术的核心在于"O"--只有做到Service-Orientation的技术,才能真正称为SOA技术。
怎样才能算作Service-Orientation?我们再以OO进行类比:VB之所以被称为基于对象(Object-Based)而不是面向对象(Object-Oriented)的语言,是因为VB的运行时结构不具有VMT等基本构造,语法上也不支持私有成员,继承等基础特性,两者结合,就造成无法支持封装,继承,多态等面向对象的关键技术。一句话,VB不是围绕“对象”这个核心概念设计的语言。对于SOA技术,它也可以从这个角度划分两个层次:一个是SOA的“运行时”相关结构标准,例如SOAP,WSDL,WS-*等,相当于OO中的对象内部结构,VMT构造等。另外一个则是语言和工具层面的支持,例如基于元数据的服务描述,支持Web Service的类库,Proxy生成工具等,相当于OO语言中提供的基本OO语法,类库,编绎器等。这两个层次共同构成SOA体系结构中的要素,让人们能够围绕“服务”这个核心概念进行系统开发和应用。因此,一种技术架构,平台或产品要称作SOA,应当同时具备这一两方面的特征。
所以,下面将要讨论的JAX-WS技术,从上面的观点来看,也就是SOA技术的第二个层次,即语言和工具层面的支持--Java,例如基于元数据的服务描述,支持Web Service的类库,Proxy生成工具等.
Java API for XML Web Services(JAX-WS)2.0,是Java EE 5平台的一个重要的部分。作为Java API for XML-baseed RPC 1.1(JAX-RPC)的后续版本,在JAX-RPC 1.1中,开发人员需要写一个接口类Service Endpoint Interface(SEI),在JAX-WS 2.0中,开发人员一上来就可以直接写自己的实现类. 通过使用annotations,自动生成SEI和其他一些文件.这样有助于开发人员专注于自己想开发的部分,而不必要地分散精力去维护其他的一些附属文件.
二.快速实践JAX-WS2.0
下面通过一个两个数相加的简单例子来看看,JAX-WS 2.0 API的应用过程.程序是一个独立的客户端传给服务端两个整数,经过服务端处理后,将结果返回到客户端并打印出来.
一. 环境配置.
1. JDK 5.0 or higher
下载: http://java.sun.com/javase/downloads/index.jsp
2. Java EE 5.0 App Server.
这个例子是基于Java EE 5的一个开源实现项目GlassFish。https://glassfish.dev.java.net/public/downloadsindex.html
本例子所需的基本代码的压缩包可以通过这个链接下载。里面包括了这个例子需要的代码,构建脚本和一个build文件。
环境变量的配置:
·
GLASSFISH_HOME.
这个应该指向你安装GlassFish的目录(比如,我系统上的是:J:\Sun\AppServer)
· ANT_HOME.
这个应该指向ant所安装的目录。在你下载GlassFish bundle时Ant已经被包含在里面了。(对于Windows系统,它是在lib\ant子目录)。不过你也可以从
Apache Ant Project page.下载Ant。对于这个例子需要Apache ant 1.6.5
· JAVA_HOME.
这个应该指向你系统上安装的JDK 5.0(or higher)的目录。
同时,把ant的bin目录添加到Path环境变量中去(J:\apache-ant-1.6.5\bin),当然了JDK的bin目录也加进去了。
然后下载例子的代码包并且解压。根文件夹是jaxws-techtip。
endpoint\
目录下有一个文件Calculator.java
client\
目录下有一个文件JAXWSClient.java
二.编写构建服务端
随着第一步环境配置的完全,现在该开始构建一个web服务了。在这个例子里,web服务是从一个Java类来开发的。为了构建这个web服务:
1.写一个端点实现类(endpoint implementation class)。
2.编绎这个端点实现类。
3.有选择的产生对web服务的运行必须具备的那些可移植的制品。
4.把web服务打包成一个WAR文件并且在App Server中部署它。
1 编写实现类.
进到endpoint\
目录下,可以看到里面有一个文件Calculator.java.它是一个端点实现类,具备有对两个整数进行相加的简单服务。
JAX-WS 2.0大量地依赖注释(annotations)的使用,它是A Metadata Facility for the Java Programming Language (JSR 175)描述的规范和Web Services Metadata for the Java Platform (JSR 181)描述的规范。
packageendpoint;
importjavax.jws.WebService;
importjavax.jws.WebMethod;
@WebService(
name="Calculator",
serviceName="CalculatorService",
targetNamespace="http://techtip.com/jaxws/sample"
)
publicclassCalculator...{
publicCalculator()...{}
@WebMethod(operationName="add",action="urn:Add")
publicintadd(inti,intj)...{
intk=i+j;
System.out.println(i+"+"+j+"="+k);
returnk;
}
}
研究上面的实现类Calculator
,注意到类里的两个注释的使用@WebService
跟@WebMethod。一个正确的端点实现类必须包含有一个@WebService注释。这个注释标注这个类将作为一个web服务对外开放。@WebService的name属性表明了web服务描述语言(WSDL)里的端口类型(
portType)(在这个例子里是”Calculator”)。而
serviceName="CalculatorService"对应的是一个WSDL里的服务元素(service)。targetNamespace属性为WSDL说明了XML的命名空间。所有的这些属性都是可选的。对于这些属性的默认值是什么,请参考Web Services Metadata for the Java Platform规范,JSR 181。
再来看看另外一个重要的注释@WebMethod,被它注释过的方法说明将它以一个
web服务的方法暴露出来,被其他应用来调用。
@WebMethod注释里的operationName
声明了WSDL里的一个元素WSDL operation(在这个例子里,”add”),另外一
个属性action =("urn:Add
"),它为WSDL还有一些从这个web服务操作(web service operation)生
成的元素声明了一个命名空间。这两个属性都是可选的。如果你没有列出来的
话,WSDL操作(operation)的值将会默认为方法名,还有action值也会默认为
服务的targetNamespace。
2
编绎实现类
写完了上面的实现类之后,你需要编绎它。点击 开始->程序->Sun Microsystems->“Start Default Server”启动应用服务器或者通过在DOS窗口下敲下面的命令来启动它:<GF_install_dir>\bin\asadmin start-domain domain1,其中GF_install_dir是你安装GlassFish的目录,也就是说先到<GF_install_dir>\bin目录下,然后用命令asadmin start-domain domain1来启动应用服务器。现在将目录转到jaxws-techtip文件夹下,运行下面的ant命令,也就是执行第一个任务complie:
ant compile
执行这个命令就相当于执行以下的javac命令(都是在同一行):
javac -classpath $GLASSFISH_HOME/lib/javaee.jar -d
./build/classes/service/ endpoint/Calculator.java
3 为web服务的执行产生可移植的制品
这一步是可选的。如果在这个web服务的部署期间,他们没有和一个可配置的服务单元绑定,GlassFish的部署工具能够自动地产生这些制品。然而对于刚刚接触JAX-WS来说,对于弄清楚整个编程模式来说,通过手动产生地会话会更有帮助,即运行下面的命令:
ant generate-runtime-artifacts
这个任务将会在jaxws-techtip目录下生成build/generated目录,并且运行了下面的wsgen命令(都是在同一行):
$GLASSFISH_HOME/bin/wsgen -cp ./build/classes/service -keep -d ./build/classes/service –r ./build/generated -wsdl endpoint.Calculator
一个WSDL文件(CalculatorService.wsdl)在build/generated目录下生成了,还在同个目录下生成了另外一个schema文件(CalculatorService_schema1.xsd),它为CalculatorService.wsdl定义了schema。
JavaBean技术组件(JavaBeans)在编组(marshaling,java->XML)的方法调用,响应,还有service-specific异常中起了很大的作用。这些类将会在web服务在一个应用服务器中运行的时候被使用。JavaBean类在jaxws-techtip目录下的 /build/classes/service/endpoint/jaxws目录被生成了,这些类是:
Add.java
Add.class
AddResponse.java
AddResponse.class
4 打包并部署WAR文件
接下来你需要做的工作就是对服务进行打包和部署。为了做这个,你需要在一个部署描述符中详细说明这个服务。Web服务可以绑定成servlet的形式或者无状态的session bean形式打包成Web Archive (WAR)文件。在这个例子里把它绑定为一个servlet。
为了把这个服务打包成一个WAR文件,定位到jaxws-techtip文件夹,并且在DOS窗口上运行下面的命令:
ant pkg-war
对于这个war文件的结构,我们可以到build.xml文件里看看pkg-war目标:
<targetname="pkg-war"depends="init-common">
<mkdirdir="${assemble.dir}"/>
<echomessage="mybuildclassesdiris:${build.classes.dir}"level="verbose"/>
<mkdirdir="${build.classes.dir}/tmp"/>
<mkdirdir="${build.classes.dir}/tmp/WEB-INF"/>
<mkdirdir="${build.classes.dir}/tmp/WEB-INF/classes"/>
<mkdirdir="${build.classes.dir}/tmp/WEB-INF/wsdl"/>
<copyfile="${web.xml}"
tofile="${build.classes.dir}/tmp/WEB-INF/web.xml"failonerror="false"/>
<copytodir="${build.classes.dir}/tmp/WEB-INF/classes">
<filesetdir="${build.classes.dir}/service">
<includename="**/*.class"/>
<includename="**/${handler.name}"/>
</fileset>
</copy>
<copytodir="${build.classes.dir}/tmp/WEB-INF/wsdl">
<filesetdir="${build.generated.dir}">
<includename="**/*.*"/>
</fileset>
</copy>
<echomessage="Creatingwarfile${assemble.dir}/${appname}-web.war"level="verbose"/>
<jarjarfile="${assemble.dir}/${appname}-web.war"update="true">
<filesetdir="${build.classes.dir}/tmp"casesensitive="yes">
<includename="**/*class*"/>
<includename="**/${handler.name}"/>
</fileset>
<filesetdir="${build.classes.dir}/tmp/"casesensitive="true">
<includename="WEB-INF/web.xml"/>
</fileset>
<filesetdir="${build.classes.dir}/tmp"casesensitive="yes">
<includename="WEB-INF/wsdl/*.*"/>
</fileset>
</jar>
<echomessage="createdwarfile${assemble.dir}/${appname}-web.war"level="verbose"/>
</font-
分享到:
相关推荐
JAX-WS 2.0是JAX-WS的第二个主要版本,它在JAX-RPC(Java API for XML-based RPC)的基础上进行了改进,引入了许多新特性以提升开发者的体验和效率。 **JAX-WS 2.0 的核心概念:** 1. **服务端点接口(SEI, ...
### 设计与开发 JAX-WS 2.0 Web 服务 #### JAX-WS 技术概述 JAX-WS(Java API for XML Web Services)是Java平台中用于简化Web服务开发的一项关键技术。该技术提供了全面的支持,使得开发者能够在Java环境中轻松...
本篇文章将深入探讨JAX-WS 2.0的核心概念、功能及其与相关技术如JAXB(Java Architecture for XML Binding)、SAAJ(SOAP with Attachments API for Java)和WSDL(Web Services Description Language)的交互。...
### JAX-WS 2.0 规范详解 #### 一、概述 JAX-WS(Java API for XML Web Services)2.0 是一种用于创建和访问 Web 服务的标准 Java API,它允许开发人员使用 Java 编写 Web 服务,并以 XML 的形式进行数据交换。JAX...
JAX-WS 2.0 是Java API for XML Web Services的第二个主要版本,它引入了异步Web服务调用的功能,以解决在Service-Oriented Architecture(SOA)环境中开发响应迅速的Web服务客户端应用程序的挑战。由于Web服务调用...
[奥莱理] RESTful Java 开发 (Jax-RS 2.0 实现) (英文版) [奥莱理] RESTful Java with JAX-RS 2.0 (E-Book) ☆ 图书概要:☆ Learn how to design and develop distributed web services in Java, using RESTful ...
标题"jax-rs jax-ws所需包,亲测可用"表明这个压缩包包含了用于开发Java RESTful Web服务(JAX-RS)和Java SOAP Web服务(JAX-WS)所需的库文件。这些库是Java应用程序进行Web服务交互的核心组件,确保了对HTTP协议...
Java API for XML Web Services(JAX-WS)是Java平台上用于构建和消费Web服务的标准API。它简化了创建和使用Web服务的过程,使得开发者能够通过SOAP消息与远程服务进行交互。JAX-WS允许开发者将服务接口直接映射到...
解决这些问题通常需要深入理解WebLogic的配置机制和JAX-WS的工作原理,以及具备一定的Java编程经验。如果遇到困难,查阅官方文档、社区论坛或咨询专业开发人员都能获得帮助。记住,正确配置和测试是成功部署的关键。
作者Bill Burke以其在Java技术方面的深厚底蕴和对RESTful架构的深刻理解,引领读者深入理解并掌握JAX-RS 2.0标准。 书中首先介绍了REST的概念以及其与HTTP的重生之间的联系。REST(Representational State Transfer...
在给定的压缩包文件"jax-ws api jar包"中,包含的是JAX-WS 2.2.1版本的API库,即`jaxws-api-2.2.1.jar`。这个jar文件是开发基于JAX-WS的Web服务所必需的依赖之一。以下是关于JAX-WS的一些核心知识点: 1. **服务端...
标题提到的"JAX-WS所需Jar包"是指为了在Java环境中支持JAX-WS功能,开发者需要的一组核心库。这些库包含了运行和开发JAX-WS Web服务所必需的组件。下面将逐一解释这些库的作用: 1. **jaxb-xjc.jar**: 这是Java ...
基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...
3.众多元数据(Annotations)会被JAX-WS用来描述Web Services的相关类,包括Common Annotations, Web Services Metadata, JAXB2的元数据和JAX-WS2.0规范自己的元数据. 4.Annotation Processing Tool(APT)是JAX-WS重要的...
本指南将深入探讨JAX-WS 2.1的核心概念、功能以及如何在实际开发中应用它。以下是对JAX-WS 2.1的详细解析: 1. **JAX-WS简介** JAX-WS是基于SOAP(Simple Object Access Protocol)和WSDL(Web Services ...
标题中的“一个包含jax-ws和jax-rs的例子(含服务端和客户端)”是指这是一个示例项目,它演示了如何使用Java API for XML Web Services (JAX-WS)和Java API for RESTful Web Services (JAX-RS)来创建和消费Web服务。...
读者可以通过阅读该博客文章深入了解JAX-WS的实践应用。 综上所述,JAX-WS是Java平台上的Web服务标准,它通过注解驱动的模型和XML配置方式,简化了Web服务的开发和调用。与JAXB结合使用,能够高效地处理数据交换,...
**JAX-WS API** Java API for XML Web Services (JAX-WS) 是Java平台上的一个标准接口,用于创建和消费Web服务。它是Sun Microsystems在2004年推出的一个重要框架,旨在简化Web服务的开发,使得Java开发者能够更...
- **JAX-WS 2.0 中的 MTOM**:详细描述了 MTOM 在 JAX-WS 2.0 版本中的实现方式。 - **swaRef**:介绍了 swaRef 的概念及其在 JAX-WS 中的使用。 ##### SOAP 1.2 - **简介**:概述了 SOAP 1.2 的特点及其与 JAX-WS ...
本篇将深入讲解如何基于JAX-WS开发一个WebService实例。 首先,让我们了解JAX-WS的基本概念。JAX-WS提供了一种简单的方式来创建SOAP(Simple Object Access Protocol)Web服务,它集成了Java SE和Java EE平台,使得...