Java Web Services开发基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

JavaWebServices开发基础刘涛2011.9WebServices(Web服务)是主流的分布式软件技术之一,本文列举了Web服务的基本概念、Java开发WebServices的主流框架、HelloWorld实例,有助于JavaWebServices开发入门。1.WebServices简单理解WebServices是发布在网络上(包括Internet、Intranet和局域网),由众多Client(不论平台、语言)通过网络调用的软件功能/服务,是一种特殊的Web应用。从最终使用WebServices角度来看,程序员可以像调用本地jar包或dll文件里的方法一样,调用远程WebServices里的操作。(附录有WebServices简介)2.JavaWebServices两个规范:JAX-RPC1.1、JAX-WS2.0JAX-RPC1.1、JAX-WS2.0是JavaWebServices的两个主要规范,后者是前者的延续,兼容前者,又比前者支持更高版本的SOAP、WSDL等规范,增加异步调用等新内容。更多的差异,可参考《Web服务提示与技巧:JAX-RPC与JAX-WS的比较》一文。3.直接查看/调用现有WebServices直接在浏览器中输入wsdl地址,形如,可查看到wsdl。打开EclipseJavaEEperspective中Run/LaunchtheWebServicesExplorer,通过wsdlurl找到WebServices,然后给WSDLoperation输入参数值即可调用服务、返回结果了,具体可参考EclipseHelpWebApplicationDevelopmentUserGuideDevelopingWebserviceapplicationsTestingandvalidatingWebservicesTestingWSDLdocumentsandWebservicesusingtheWSDLExplorer。在Eclipse中也可配置TCP/IPMonitor监视WebServices客户端和服务端之间的HTTP通信,详见EclipseHelpWebApplicationDevelopmentUserGuideDevelopingWebserviceapplicationsTestingandvalidatingWebservicesUsingtheTCP/IPMonitortotestWebservices。axis1带有一个tcpmon,可独立运行,详见axis1User'sGuide/Appendix:UsingtheAxisTCPMonitor(tcpmon)。4.JavaWebServices的开发模式自上而下,契约优先,WSDL优先,先创建WSDL,再由WSDL生成代码。自下而上,代码优先,先写代码,再由代码生成WSDL。5.WebServices开发注意点安全性。WebServices以soap消息通过http等传输,天生不具备安全机制。实现服务安全的方法:https传输层加密,WS-Security消息加密/签名,内容自行加密。复杂数据类型。Java数据类型要和WSDL/XSD数据类型互相映射,字符串等简单数据类型映射方便,对于List、Map之类复杂数据类型一般需要给框架配置序列化/反序列化方式。可通过输入参数、输出参数均是xml串、自己解析数据来绕过复杂数据类型映射问题。互操作性。不同版本规范、不同语言、不同框架生成的web服务互用性不是100%。6.JavaWebServices的开发框架Java中WebServices开发框架广为人知的主要有:axis1,xfire,axis2,cxf,metro/JAX-WSRI,spring-ws。axis1实现了JAX-RPC1.1,最高版本是1.4(2006.4.22)。xfire实现了JAX-WS2.0部分,最高版本是1.2.6(2007.5.3)。axis2是axis1的下一代框架,实现了JAX-WS2.0,目前版本是1.6.1(2011.8.30)。cxf是在xfire和Celtix合并基础上演进的,实现了JAX-WS2.0,目前版本是2.4.2(2011.8.15)。metro来自应用服务器glassfish,是以JAX-WSRI为核心的WebServices栈。JAX-WSRI实现了JAX-WS各版本,目前版本是2.2.5。spring-ws最大的特点是只支持WSDL优先开发模式,入门困难,目前版本是2.0.2(2011.5.20)。全面、中肯地比较各个框架优劣是困难的,需要对多种规范、框架有深刻理解,但我们开发者可简单从主流IDE对这些框架的支持来获得直观印象,比如最新的Eclipse3.7同时支持axis1、axis2、cxf。7.J2SE6的HelloWorld服务实例7.1用注解编写JAX-WS服务packageexample.ws.jdk6.server;importjavax.jws.WebService;@WebServicepublicclassSayHello{privatestaticfinalStringSALUTATION=Hello;publicStringgetGreeting(Stringname){returnSALUTATION++name;}}7.2通过ant用wsgen命令行或anttask生成服务发布所需的类targetname=wsgenexecexecutable=wsgenargline=-cp${cp.dir}-keep-s${src.gen.dir}-d${output.dir}example.ws.jdk6.server.SayHello//exec/target7.3用JDK提供的轻量HTTPserver部署webservicespackageexample.ws.jdk6.server;importjavax.xml.ws.Endpoint;publicclassRunWSWithJdk6HttpServer{publicstaticvoidmain(String[]args){Endpoint.publish(());}}7.4启动webservices,用WebServicesExplorer测试7.5通过ant用wsimport命令行或anttask生成客户端所需的类targetname=wsimportexecexecutable=wsimportargline=-keep-s${src.gen.dir}-pexample.ws.jdk6.client.jaxws-d${output.dir}${wsdl.url}//exec/target7.6编写客户端packageexample.ws.jdk6.client;importjavax.xml.ws.BindingProvider;importorg.apache.log4j.Logger;importexample.ws.jdk6.client.jaxws.SayHello;importexample.ws.jdk6.client.jaxws.SayHelloService;publicclassSayHelloClient{privatestaticfinalLoggerLOGGER=Logger.getLogger(SayHelloClient.class);publicstaticvoidmain(String[]args){StringorignWsdlUrl==newSayHelloService();SayHellosh=(SayHello)shs.getSayHelloPort();((BindingProvider)sh).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,orignWsdlUrl);LOGGER.info(((BindingProvider)sh).toString());LOGGER.info(sh.getGreeting(liutao));}}8.axis1的HelloWorld服务实例8.1编写JAX-RPC服务packageexample.ws.axis.server;publicclassWelcome{privatestaticfinalStringSALUTATION=Hello;publicStringgreet(Stringname){returnSALUTATION++name;}}8.2选中服务类,右键弹出WebServices向导,向导拷贝axis及其依赖jar、生成axis部署文件和WSDL图8-1axis服务向导1图8-2axis服务向导2图8-3axis服务向导3单击“Startserver”后,成功启动Server后再Next图8-4axis服务向导4图8-5axis服务向导5图8-6axis服务向导6图8-7axis服务向导78.3生成JAX-RPC客户端8.3.1用WebServices向导生成Proxy客户端选中工程,单击FileNewOtherWebServicesWebServicesClient:图8-8axis客户端向导1图8-9axis客户端向导2图8-10axis客户端向导3图8-11axis客户端向导4调用生成的Proxy客户端:packageexample.ws.axis.client;importjava.rmi.RemoteException;importorg.apache.log4j.Logger;importexample.ws.axis.client.autogen.WelcomeProxy;publicclassWelcomeProxyClient{privatestaticfinalLoggerLOGGER=Logger.getLogger(WelcomeProxyClient.class);publicstaticvoidmain(String[]args){WelcomeProxywelcomeProxy=newWelcomeProxy();Stringgreeting=null;try{greeting=welcomeProxy.greet(liutao);}catch(RemoteExceptione){LOGGER.error(e.getMessage(),e);return;}LOGGER.info(greeting);}}8.3.2直接调用WebServices向导生成的服务stubpackageexample.ws.axis.client;importjava.net.URL;importorg.apache.log4j.Logger;importexample.ws.axis.client.autogen.WelcomeSoapBindingStub;publicclassWelcomeStubClient{privatestaticfinalLoggerLOGGER=Logger.getLogger(WelcomeStubClient.class);publicstaticvoidmain(String[]args){Stringgreeting=null;try{URLendpointURL=newURL();WelcomeSoapBindin

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功