`

更简单,更强大的JAX-WS

    博客分类:
  • REST
阅读更多

JAX-WS2.0的来历

--------------------------------------------------------------------------------
JAX-WS(JSR-224)
Java Architecture for XML Web Services的缩写,简单说就是一种用JavaXML开发Web Services应用程序的框架, 目前版本是2.0, 它是JAX-RPC 1.1的后续版本, J2EE 1.4带的就是JAX-RPC1.1, Java EE 5里面包括了JAX-WS 2.0,但为了向后兼容,仍然支持JAX-RPC. 现在,SUN又把JAX-WS直接放到了Java SE 6里面,由于JAX-WS会用到Common Annotation(JSR 250),Java Web Services Metadata(JSR 181), JAXB2(JSR 222), StAX(JSR 173), 所以SUN也必须把后几个原属于Java EE范畴的Components下放到Java SE, 现在我们可以清楚地理解了为什么Sun要把这些看似跟Java SE没有关系的Components放进来,终极目的就是要在Java SE里面支持Web Services.

JAX-WS2.0
的架构

--------------------------------------------------------------------------------
JAX-WS
不是一个孤立的框架,它依赖于众多其他的规范,本质上它由以下几部分组成
1.
用来开发Web ServicesJava API
2.
用来处理Marshal/UnmarshalXML Binding机制,JAX-WS2.0JAXB2来处理Java ObjectXML之间的映射,Marshalling就是把Java Object映射到XML,Unmarshalling则是把XML映射到Java Object.之所以要做Java ObjectXML的映射,是因为最终作为方法参数和返回值的Java Object要通过网络传输协议(一般是SOAP)传送,这就要求必须对Java Object做类似序列化和反序列化的工作,SOAP中就是要用XML来表示Java object的内部状态
3.
众多元数据(Annotations)会被JAX-WS用来描述Web Services的相关类,包括Common Annotations, Web Services Metadata, JAXB2的元数据和JAX-WS2.0规范自己的元数据.
4.Annotation Processing Tool(APT)
JAX-WS重要的组成部分,由于JAX-WS2.0规范用到很多元数据,所以需要APT来处理众多的Annotations.<JDK_HOME>/bin下有两个命令wsgenwsimport,就是用到APTCompiler API来处理碰到的Annotations,wsgen可以为Web Services Provider产生并编译必要的帮助类和相关支持文件,wsimportWSDL作为输入为Web Service Consumer产生并编译必要的帮助类和相关支持文件.
5.JAX-WS
还包括JAX-WS Runtime与应用服务器和工具之间的契约关系

JAX-WS2.0
的编程模型

--------------------------------------------------------------------------------
现在用JAX-WS2.0来编写Web Services非常简单,不像JAX-RPC,JAX-WS可以把任意POJO暴露为Web Services,服务类不需要实现接口,服务方法也没有必要抛出RMI异常.下面介绍在JDK6环境下用JAX-WS2.0开发和测试Web Services的步骤
1.
编写服务类,并用Web Services Metadata(JSR-181)标注这个服务类,我用我的另一篇BlogJDK6的新特性之十:Web服务元数据中的WSProvider类作为服务类的例子,在此我重复贴一下WSProvider类的源代码:

 

/**
* @author chinajash
*/
@WebService(targetNamespace="http://blog.csdn.net/chinajash",serviceName="HelloService")
public class WSProvider {
     @WebResult(name="Greetings")//自定义该方法返回值在WSDL中相关的描述    
     @WebMethod
     public String sayHi(@WebParam(name="MyName") String name){
         return "Hi,"+name; //@WebParam是自定义参数name在WSDL中相关的描述
     }    
     @Oneway //表明该服务方法是单向的,既没有返回值,也不应该声明检查异常
     @WebMethod(action="printSystemTime",operationName="printSystemTime")//自定义该方法在WSDL中相关的描述
     public void printTime(){
         System.out.println(System.currentTimeMillis());
     }
     public static void main(String[] args) {
         Thread wsPublisher = new Thread(new WSPublisher());
         wsPublisher.start();
     }    
     private static class WSPublisher implements Runnable{
         public void run() {
             //发布WSProvider到http://localhost:8888/chinajash/WSProvider这个地址,之前必须调用wsgen命令
             //生成服务类WSProvider的支持类,命令如下:
             //wsgen -cp . WebServices.WSProvider
             Endpoint.publish("http://localhost:8888/chinajash/WSProvider",new WSProvider());
         }        
     }
}

 

2.wsgen生成上面服务类的必要的帮助类,然后调用用EndPoint类的静态方法publish发布服务类(步骤请参考我的另一篇Blog JDK6的新特性之十:Web服务元数据),我在这里是将服务类发布到http://localhost:8888/chinajash/WSProvider
3.
wsimport为服务消费者(也就是服务的客户端)生成必要的帮助类,命令如下:
wsimport http://localhost:8888/chinajash/WSProvider?wsdl
这会在<当前目录>\net\csdn\blog\chinajash下生成客户端的帮助类,在这个例子中会生成7个类
HelloService.class
ObjectFactory.class
package-info.class
PrintSystemTime.class
SayHi.class
SayHiResponse.class
WSProvider.class
4.
在客户端用下面代码即可调用步骤1定义的Web Service
HelloService hs = new HelloService();
WSProvider ws = hs.getWSProviderPort();
System.out.println(ws.sayHi("chinajash"));
ws.printSystemTime();
调用上述代码后客户端控制台输出
hi,chinajash
服务端控制台输出服务器当前系统时间

分享到:
评论

相关推荐

    JAX-WS自学笔记

    本人自学JAX-WS笔记和简单例子,文档标题结构如下: JAX-WS使用教程 1、JAX-WS概述 2、创建Web Service 2.1 从java开始 2.1.1 运行wsgen 2.1.2 生成的WSDL和XSD 2.1.3 目录结构 2.2 从WSDL开始 2.2.1 ...

    Jax-WS 简单实例

    Jax-WS的简单实例 Jax-WS的简单实例

    jax-rs jax-ws所需包,亲测可用

    javax.xml.ws.Service 报错需要的包,亲测可以用,直接下载在ide里buildpath一下就可以,四个jar包 ,整合了其他的jar所以配置简单

    jax-ws webservice简单demo

    jax-ws webservice完整demo,包含所有jax-ws 2.2jar包。

    jax-ws 例子

    一个简单的jax-ws实现的例子,已经分连个项目,一个是服务端,一个客户端

    JAX-WS在Tomcat中发布服务

    JAX-WS在Tomcat中发布服务实例,同时在Handler中实现简单的授权校验。

    WebService之JAX-WS自学笔记

    自己自学JAX-WS的心得,内含较为详细的讲解了简单的例子。文档目录如下: JAX-WS自学笔记 本人自学JAX-WS笔记和简单例子,文档标题结构如下: JAX-WS使用教程 1、JAX-WS概述 2、创建Web Service 2.1 从java...

    JAX-WS使用教程(内含jar包)

    jax-ws使用方法 简单易懂的 web service教程。同时提供jar包。

    JavaWeb服务SOAP(jax-ws)和REST(jax-rs)规范

    JavaWeb服务SOAP(jax-ws)和REST(jax-rs)规范,CXF整合Spring和未整合Spring的简单例子。结合说明看,简单易懂:my.oschina.net/lock0818/blog/314120

    基于JDK自带的Web服务JAX-WS实现WebService的简单示例

    Java 基于第三方插件实现WebService实在麻烦,尤其是要添加几十M的Jar包...还好,自从JDK 1.6开始,Java自身已经支持WebSeervice的开发即JAX-WS,附件是一个简单的示例,供入门参考。注意,JDK环境要求1.6及以上版本。

    jax-ws实现webservice调用

    公司代码实现,简单的webservice服务 发布,实现客户端的调用。

    JAX-WS发布webservice例子

    JAX-WS发布webservice例子,基于http://blog.csdn.net/yy_love_my/article/details/44938329所说的做的一个简单且能运行的列子,基于maven工程,如果使用servlet发布方式,执行命令:mvn tomcat7:run

    jax-ws步骤

    详细的开发教程,包你学会jdkapi webservice开发,简单移动,不需任何手动配置

    Spring MVC与JAX-RS比较与分析

    对于那些想要构建RESTful Web Services的开发者来说,JAX-RS给出了不同于JAX-WS(JSR-224)的另一种解决方案。目前共有4种JAX-RS实现,所有这些实现都支持Spring,Jersey则是JAX-RS的参考实现,也是本文所用的实现。...

    JAX-WS低版本

    tomcat+webservice实现简单的web服务远程调用接口,所需的jar

    webservicedemo+jax-ws

    这个webservicedemo里面写的是一个简单例子。说明webservice的工作原理。使用的jax-ws 有jdk6自己实现的方法。详细情况请看里面的readme.txt 有很详细的说明

    java中的jax-ws的实例

    今天去关注了下Xfire,有文章说过时了,说jax-ws是新星,暂且不去管他过不过时,所以今天在网上搜了一遍,然后自己写一个简单的。并且还写了一个文档,对于新手是有一定帮助的

    wcfe:使用 Maven 的简单 JAX-WS 和 Spring4 集成示例

    使用 Maven 的简单 JAX-WS 和 Spring4 集成示例。 这个怎么运作? 将“weather-station-impl”项目部署到 Tomcat 7 服务器。 将 CountryConsumerClient.java 或 ServiceConsumerClient.java 作为 Java 应用程序...

    jax-ws_webservice服务端程序演示

    调试环境:mycelipse10+tomcat7 包含调用简单数据类型,List类型,下载javabean对象,上传图像文件,上传javabean复杂数据对象等5个代码例子。 调试环境的配置,网上很多文章都写了。

    jax-ws_webservice客户端调用程序演示

    调试环境:mycelipse10+tomcat7 包含调用简单数据类型,List类型,下载javabean对象,上传图像文件,上传javabean复杂数据对象等5个代码例子。 调试环境的配置,网上很多文章都写了。

Global site tag (gtag.js) - Google Analytics