webService基础总结
WebService是一种跨编程语言和跨操作系统平台的远程调用技术
所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程
序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。除了WebService外,常见的远程调用技术还有RMI(Remotemethodinvoke)
和CORBA,由于WebService的跨平台和跨编程语言特点,因此比其他两种技术应用更为广泛,但性能略低。
WebService使用SOAP协议实现跨编程语言和跨操作系统平台
WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中
说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议(simpleobjectaccessprotocol,简单对象访问协议)。SOAP协议=HTTP协议+XML数据格式
HTTP协议和XML是被广泛使用的通用技术,各种编程语言对HTTP协议和
XML这两种技术都提供了很好的支持,WebService客户端与服务器端使用什么编程语言都可以完成SOAP的功能,所以,WebService很容易实现跨编程语言,跨编程语言自然也就跨了操作系统
WebService客户端要调用一个WebService服务,首先要有知道这个服务的
地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。WSDL(webservicedescriptionlanguage)是基于XML格式的,它是WebService
客户端和服务器端都能理解的标准格式,其中描述的信息可以分为what,where,how等部分!
WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户
端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:
注册到UDDI服务器,以便被人查找直接告诉给客户端调用者,例如,在自己网站给出信息或邮件告诉。
扩展阅读:webservice基础知识与学习心得
Webservice基础知识
常见术语WSDL
WSDL即"WebServicesDescriptionLanguage"简称,是一种平台中立,语言中立并且能够在Internet上自由传输的采用XML描述的语言。
Operation
Operation即定义在WSDL中的方法,它包含输入消息(inputmessage)和输出消息(outputmessage),而消息是由一个或多个块(part)组成。块Part要么是自己定义在其他schema中的消息参数,要么是来自
Porttype
Porttype也是WSDL中的节点之一,它可以形象的理解为一个Javaclass,此时Operation就是Javaclass中的方法
Binding
因消息在Internet中传输的格式和协议不同,Binding是对特殊消息格式和协议的一个封装,Binding也是WSDL中的节点之一。
Port
Port说明WebService部署在哪个端口,Port也是WSDL中的节点之一。
Targetnamespace
Targetnamespace可以形象理解为Javapackage,它没有任何意义,唯一的用途是来唯一标示WebService,使之全局唯一Endpoint
Endpoint是WebService的详细访问地址(比如::30000/meoms/services/EOMSBulletinUpService),它是可以访问的,而Targetnamespace虽然采用URL的形式命名,但是不可以访问的,一般访问会出错。
ApacheCXF,ApacheAxis2andMetrofromSunMicrosystems
ApacheCXF,ApacheAxis2andMetrofromSunMicrosystems只不过是针对Java的一些WebService处理工具,作用是在客户端传递消息过来时,把它转化为服务端Java类并请调用服务端提供的服务。
WSDL的两种形式RPCstyle
RPC即"RemoteProcedureCall",特点是WSDL中输入消息(inputmessage)和输出消息(outputmessage)定义中采用完整的参数定义,参数定义不放在其他地方。
Documentstyle
Documentstyle特点是WSDL中输入消息(inputmessage)和输出消息(outputmessage)定义可以放在其他Schema定义中,现在通常采用这种方式。
Webservice开发
前提:
已经取得WSDL,WSDL可以自己开发,现在Eclipse有专门插件支持,可以直接拖动节点来开发即可,如果是客户端,一般对方会提供他们的WSDL,但如果自己是服务端,要么是自己定义WSDL,要么是第三方提供。
以下例子都是采用AXIS开发。AXIS安装和配置安装
在下载axis-bin-1_2_1.zip,解压后即安装完成。注意:
下载的axis缺少jar包:activation.jar和mail.jar,请自己加上。
配置
增加环境变量
AXIS_HOME=C:\\Users\\Administrator\\Desktop\\axis-1_2_1修改CLASSPATH,增加
%AXIS_HOME%\\activation.jar;%AXIS_HOME%\\axis.jar;%AXIS_HOME%\\axis-ant.jar;%AXIS_HOME%\\commons-discovery-0.2.jar;%AXIS_HOME%\\commons-logging-1.0.4.jar;%AXIS_HOME%\\jaxrpc.jar;%AXIS_HOME%\\log4j-1.2.8.jar;%AXIS_HOME%\\mail.jar;%AXIS_HOME%\\saaj.jar;%AXIS_HOME%\\wsdl4j-1.5.1.jar;
AXIS中WSDL2Java命令参数说明
输入命令“avaorg.apache.axis.wsdl.WSDL2Javah”,参数说明如下-h,--help
printthismessageandexit-v,--verbose
printinformationalmessages-n,--noImports
onlygeneratecodefortheimmediateWSDLdocument-O,--timeout
timeoutinseconds(defaultis45,specify-1todisable)-D,--Debug
printdebuginformation-W,--noWrapped
turnoffsupportfor"wrapped"document/literal-q,--quiet
donotprintanyinformationalordebugmessages(excepterrors)-s,--server-side
emitserver-sidebindingsforwebservice-S,--skeletonDeploy
deployskeleton(true)orimplementation(false)indeploy.wsdd.Defaultisfalse.Assumes--server-side.-N,--NStoPkg=
mappingofnamespacetopackage-f,--fileNStoPkg
fileofNStoPkgmappings(defaultNStoPkg.properties)-p,--package
overrideallnamespacetopackagemappings,usethispackagenameinstead-o,--output
outputdirectoryforemittedfiles-d,--deployScope
addscopetodeploy.wsdd:"Application","Request","Session"-t,--testCase
emitjunittestcaseclassforwebservice-a,--all
generatecodeforallelements,evenunreferencedones-T,--typeMappingVersion
indicate1.1or1.2.Thedefaultis1.1(SOAP1.1JAX-RPCcompliant.1.2indicatesSOAP1.1encoded.)-F,--factory
nameofacustomclassthatimplementsGeneratorFactoryinterface(forextendingJavagenerationfunctions)-H,--helperGen
emitsseparateHelperclassesformetadata-B,--buildFile
emitAntBuildfileforwebservice-U,--user
usernametoaccesstheWSDL-URI-P,--password
passwordtoaccesstheWSDL-URI-X,--classpath
additionalclasspathelements-i,--nsInclude
includenamespaceingeneratedcode-x,--nsExclude
excludenamespacefromgeneratedcode-c,--implementationClassName
customnameofwebserviceimplementation-u,--allowInvalidURL
emitfileevenifWSDLendpointURLisnotavalidURL-w,--wrapArrays
PrefersbuildingbeanstostraightarraysforwrappedXMLarraytypes(defaultstooff).AXIS将WSDL转化为Java文件、客户端调用和服务端实现命令和常用参数说明
命令:
Javaorg.apache.axis.wsdl.WSDL2JavaWSDL存放位置参数说明:
-o输出文件存放起始目录
-d部署服务访问范围,可选值为"Application","Request","Session"
-s生成服务端,无此项的话一般默认为客户端,但也可以自己实现接口使之成为服务端
-S是否生成deployd.wsdd和undeployd.wsdd文件,值为true或false-p生成文件包名,如果不加,默认以WSDL中namespace来命名包名
生成客户端
命令:C:\\Users\\Administrator>javaorg.apache.axis.wsdl.WSDL2Java-peoms.npform.eomsdispatchnpform.zobservice.client.dispatchupservice
C:\\Users\\Administrator\\Desktop\\部省接口规范\\EOMSDispatchUpService.wsdl说明:
-peoms.npform.eomsdispatchnpform.zobservice.client.dispatchupservice定义生成文件包名为eoms.npform.eomsdispatchnpform.zobservice.client.dispatchupservice生成文件如下:
客户端调用服务
EOMSDispatchUpService_ServiceLocatorlocator=newEOMSDispatchUpService_ServiceLocator();EOMSDispatchUpServiceBindingStubbinding=locator.getEOMSDispatchUpService(“对方服务地址”);binding.reportAppForm(封装参数);
生成服务端
命令:C:\\Users\\Administrator>javaorg.apache.axis.wsdl.WSDL2Java-o.-dRequest-s-Strue-peoms.npform.eomsdispatchnpform.localservice.server.dispatchdownservice
C:\\Users\\Administrator\\Desktop\\部省接口规范\\EOMSDispatchDownService.wsdl说明:
-o.默认输出在C:\\Users\\Administrator目录下面-dRequest部署时访问范围-s生成服务端-Strue生成deployd.wsdd和undeployd.wsdd文件
-peoms.npform.eomsdispatchnpform.localservice.server.dispatchdownservice定义生成文件包名为eoms.npform.eomsdispatchnpform.localservice.server.dispatchdownservice生成文件如下:
服务端代码填充
一是自己实现EOMSDispatchDownServicePortType.java接口,但要修改部署文件service-config.wsdd文件中服务实现类;
二是直接填充EOMSDispatchDownServiceBindingStub.java,其实此类也只不是实现了EOMSDispatchDownServicePortType.java接口而已,只是不用修改部署文件。AXIS服务部署文件拷贝
拷贝解压后的axis文件axis-1_2_1\\axis-1_2_1\\webapps下面axis文件到tomcat目录Tomcat-5.5.25\\webapps下面;
将编译后的class文件拷贝到Tomcat-5.5.25\\webapps\\axis\\WEB-INF\\classes目录下面;将刚才服务端生成的deploy.wsdd拷贝到Tomcat-5.5.25\\webapps\\axis\\WEB-INF;
启动tomcat
浏览器中输入:8888/axis,截图如下:
点击List,弹出界面如下:
生成service-config.wsdd
注意:tomcat一定要启,axisjar包一定要配置好命令:javaorg.apache.axis.client.AdminClient-l
:8888/axis/services/EOMSDispatchDownServicedeploy.wsdd说明:
-l:8888/axis/services/EOMSDispatchDownService因我的tomcat端口已经被我修改为8888,但默认部署在端口8080,所以这里必须加参数-L来制定部署的端口。图示:
再次访问试一下:
服务发布成功,此时Tomcat-5.5.25\\webapps\\axis\\WEB-INF新增加文件server-config.wsdd
部署服务
1.只要拷贝server-config.wsdd中的
…….
到要部署服务的项目中的server-config.wsdd即可完成服务的部署。
2.其实可以自己写
…….
中的配置信息,如下:
也可以完成部署,此时都可以不管deploy.wsdd、undeploy.wsdd和service-congig.wsdd
友情提示:本文中关于《webService基础总结》给出的范例仅供您参考拓展思维使用,webService基础总结:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。