`

JDK6的新特性之十一:更简单,更强大的JAX-WS

 
阅读更多
JDK6的新特性之十一:更简单,更强大的JAX-WS

JAX-WS2.0的来历

--------------------------------------------------------------------------------
JAX-WS(JSR-224)是JavaArchitectureforXMLWebServices的缩写,简单说就是一种用Java和XML开发WebServices应用程序的框架,目前版本是2.0,它是JAX-RPC1.1的后续版本,J2EE1.4带的就是JAX-RPC1.1,而JavaEE5里面包括了JAX-WS2.0,但为了向后兼容,仍然支持JAX-RPC.现在,SUN又把JAX-WS直接放到了JavaSE6里面,由于JAX-WS会用到CommonAnnotation(JSR250),JavaWebServicesMetadata(JSR181),JAXB2(JSR222),StAX(JSR173),所以SUN也必须把后几个原属于JavaEE范畴的Components下放到JavaSE,现在我们可以清楚地理解了为什么Sun要把这些看似跟JavaSE没有关系的Components放进来,终极目的就是要在JavaSE里面支持WebServices.

JAX-WS2.0的架构

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

JAX-WS2.0的编程模型

--------------------------------------------------------------------------------
现在用JAX-WS2.0来编写WebServices非常简单,不像JAX-RPC,JAX-WS可以把任意POJO暴露为WebServices,服务类不需要实现接口,服务方法也没有必要抛出RMI异常.下面介绍在JDK6环境下用JAX-WS2.0开发和测试WebServices的步骤
1.编写服务类,并用WebServicesMetadata(JSR-181)标注这个服务类,我用我的另一篇BlogJDK6的新特性之十:Web服务元数据中的WSProvider类作为服务类的例子,在此我重复贴一下WSProvider类的源代码:
/**
*@authorchinajash
*/
@WebService(targetNamespace="http://blog.csdn.net/chinajash",serviceName="HelloService")
publicclassWSProvider{
@WebResult(name="Greetings")//自定义该方法返回值在WSDL中相关的描述
@WebMethod
publicStringsayHi(@WebParam(name="MyName")Stringname){
return"Hi,"+name;//@WebParam是自定义参数name在WSDL中相关的描述
}
@Oneway//表明该服务方法是单向的,既没有返回值,也不应该声明检查异常
@WebMethod(action="printSystemTime",operationName="printSystemTime")//自定义该方法在WSDL中相关的描述
publicvoidprintTime(){
System.out.println(System.currentTimeMillis());
}
publicstaticvoidmain(String[]args){
ThreadwsPublisher=newThread(newWSPublisher());
wsPublisher.start();
}
privatestaticclassWSPublisherimplementsRunnable{
publicvoidrun(){
//发布WSProvider到http://localhost:8888/chinajash/WSProvider这个地址,之前必须调用wsgen命令
//生成服务类WSProvider的支持类,命令如下:
//wsgen-cp.WebServices.WSProvider
Endpoint.publish("http://localhost:8888/chinajash/WSProvider",newWSProvider());
}
}
}
2.用wsgen生成上面服务类的必要的帮助类,然后调用用EndPoint类的静态方法publish发布服务类(步骤请参考我的另一篇BlogJDK6的新特性之十:Web服务元数据),我在这里是将服务类发布到http://localhost:8888/chinajash/WSProvider
3.用wsimport为服务消费者(也就是服务的客户端)生成必要的帮助类,命令如下:
wsimporthttp://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定义的WebService
HelloServicehs=newHelloService();
WSProviderws=hs.getWSProviderPort();
System.out.println(ws.sayHi("chinajash"));
ws.printSystemTime();
调用上述代码后客户端控制台输出
hi,chinajash
服务端控制台输出服务器当前系统时间

分享到:
评论

相关推荐

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

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

    使用JAX-WS(JWS)发布WebService

    使用JAX-WS(JWS)发布WebService 使用myeclipse开发java的webservice的两种方式 方式一: (此方式只能作为调试,有以下bug:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在...

    JAX-WS的lib、src和docs

    JAX-WS不是一个孤立的框架,它依赖于众多其他的规范,本质上它由以下几部分组成 1.用来开发Web Services的Java API 2.用来处理Marshal/Unmarshal的XML Binding机制,JAX-WS2.0用JAXB2来处理Java Object与XML之间的映射,...

    jax-ws发布webservice

    以jdk1.6以上自带的jax-ws来发布webservice,压缩包里包含服务端和客户端,下载导入即可启动运行测试,有疑问的话欢迎咨询哈

    JDK1.6新特性与实战例子

    JDK6的新特性之一:Desktop类和SystemTray类 JDK6的新特性之二:使用JAXB2来实现对象与XML之间的映射 JDK6的新特性之三:理解StAX StAX(JSR 173)是JDK6.0中除了DOM和SAX之外的又一种处理XML文档的API JDK6的新特性...

    jackson-datatype-jdk8-2.11.4-API文档-中文版.zip

    赠送jar包:jackson-datatype-jdk8-2.11.4.jar; 赠送原API文档:jackson-datatype-jdk8-2.11.4-javadoc.jar; 赠送源代码:jackson-datatype-jdk8-2.11.4-sources.jar; 赠送Maven依赖信息文件:jackson-datatype-...

    bctsp-jdk14-1.38-API文档-中英对照版.zip

    赠送jar包:bctsp-jdk14-1.38.jar; 赠送原API文档:bctsp-jdk14-1.38-javadoc.jar; 赠送源代码:bctsp-jdk14-1.38-sources.jar; 赠送Maven依赖信息文件:bctsp-jdk14-1.38.pom; 包含翻译后的API文档:bctsp-jdk...

    jdk8安装包: jdk-8u202-windows-x64

    jdk8安装包: jdk-8u202-windows-x64

    JDK+6.0+ZH+API.chm.zip

    JDK6的新特性 JDK6的新特性之一_Desktop类和SystemTray类 JDK6的新特性之二_使用JAXB2来...JDK6的新特性之十一_更简单强大的JAX-WS JDK6的新特性之十三_JTable的排序和过滤 JDK6的新特性之十二_脚本语言支持

    Web Service学习小结——基于JDK自带JAX-WS实现的web service

    NULL 博文链接:https://yimengzhu.iteye.com/blog/1879330

    bcpkix-jdk15on-1.68-API文档-中文版.zip

    赠送jar包:bcpkix-jdk15on-1.68.jar; 赠送原API文档:bcpkix-jdk15on-1.68-javadoc.jar; 赠送源代码:bcpkix-jdk15on-1.68-sources.jar; 赠送Maven依赖信息文件:bcpkix-jdk15on-1.68.pom; 包含翻译后的API文档...

    bcprov-jdk15on-1.68-API文档-中英对照版.zip

    赠送jar包:bcprov-jdk15on-1.68.jar; 赠送原API文档:bcprov-jdk15on-1.68-javadoc.jar; 赠送源代码:bcprov-jdk15on-1.68-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk15on-1.68.pom; 包含翻译后的API文档...

    jax-ws步骤

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

    bcmail-jdk14-1.38-API文档-中文版.zip

    赠送jar包:bcmail-jdk14-1.38.jar; 赠送原API文档:bcmail-jdk14-1.38-javadoc.jar; 赠送源代码:bcmail-jdk14-1.38-sources.jar; 赠送Maven依赖信息文件:bcmail-jdk14-1.38.pom; 包含翻译后的API文档:bcmail...

    bcprov-jdk14-1.38-API文档-中文版.zip

    赠送jar包:bcprov-jdk14-1.38.jar; 赠送原API文档:bcprov-jdk14-1.38-javadoc.jar; 赠送源代码:bcprov-jdk14-1.38-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk14-1.38.pom; 包含翻译后的API文档:bcprov...

    Mac Jdk: jdk-8u40-macosx-x64.1427945120.dmg

    Mac Jdk: jdk-8u40-macosx-x64.1427945120.dmg

    webservice Demo注解+jax-ws

    对webservice入门是很好的例子 使用webservice注解 基于jax ws jdk自带实现 知识点在readme txt中有详细介绍

    bcprov-jdk14-1.38-API文档-中英对照版.zip

    赠送jar包:bcprov-jdk14-1.38.jar; 赠送原API文档:bcprov-jdk14-1.38-javadoc.jar; 赠送源代码:bcprov-jdk14-1.38-sources.jar; 赠送Maven依赖信息文件:bcprov-jdk14-1.38.pom; 包含翻译后的API文档:bcprov...

    jackson-datatype-jdk8-2.13.1-API文档-中文版.zip

    赠送jar包:jackson-datatype-jdk8-2.13.1.jar; 赠送原API文档:jackson-datatype-jdk8-2.13.1-javadoc.jar; 赠送源代码:jackson-datatype-jdk8-2.13.1-sources.jar; 赠送Maven依赖信息文件:jackson-datatype-...

    bctsp-jdk14-1.38-API文档-中文版.zip

    赠送jar包:bctsp-jdk14-1.38.jar; 赠送原API文档:bctsp-jdk14-1.38-javadoc.jar; 赠送源代码:bctsp-jdk14-1.38-sources.jar; 赠送Maven依赖信息文件:bctsp-jdk14-1.38.pom; 包含翻译后的API文档:bctsp-jdk...

Global site tag (gtag.js) - Google Analytics