axis发布webservices.docx
- 文档编号:3779038
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:33
- 大小:38.23KB
axis发布webservices.docx
《axis发布webservices.docx》由会员分享,可在线阅读,更多相关《axis发布webservices.docx(33页珍藏版)》请在冰豆网上搜索。
axis发布webservices
用axis发布webservices
(一)
首先到apache的网站下载axis的开发包,好久没看了,现在已经开始出2.0的啦,不过好像还不是很成熟,这里,我们还是用1.x的包。
最新的是1.3的包(如果是用jbuilder的话是不需要再下载的,可以用其自带的工具发布的,做起来很简单,不过下面是以比较通用的方式来介绍)。
一、服务器端开发
首先编写服务端程序,这时我们完全不用考虑他是不是当作webservcies来发布的,因为在写法上没有什么不同。
比如我们写了一个很简单的java程序,代码如下:
packagesamples.userguide.example2;
publicclassCalculator{
publicintadd(inti1,inti2)
{
returni1+i2;
}
publicintsubtract(inti1,inti2)
{
returni1-i2;
}
}
如果我们要把他发布成为services,首先需要把axis-1_3下的lib文件复制到我们的web服务的web-inf的lib下。
然后在web.xml里增加以下内容
第一个是制定AxisServlet的类是必须的,余下的是配置servletmapping的,可根据需要进行修改,比如不需要对*.jws做mapping的时候就可以去掉相应的部分。
完成了上边的必须配置我们就有两种方式来发布了:
1、动态发布,直接把Calculator的java文件复制到webroot下,把Calculator.java更名为Calculator.jws,然后通过http:
//localhost:
8080/Calculator.jws 访问就可以,通过http:
//localhost:
8080/Calculator.jws?
wsdl就可以看到相应的wsdl。
这种方式调试起来比较麻烦,而且我再测试的时候也不能带package的信息,而且一些高级的配置无法实施,不建议采用。
2、静态发布,就是通过配置文件发布,这时候我们类的编译和普通的web方式没有不同,只是在web-inf下多了一个配置文件,默认的名称为server-config.wsdd
xmlversion="1.0"encoding="UTF-8"?
>
xmlns: java="http: //xml.apache.org/axis/wsdd/providers/java" xmlns: handler="http: //xml.apache.org/axis/wsdd/providers/handler"xmlns="http: //xml.apache.org/axis/wsdd/"> org.apache.axis.handlers.JWSHandler"> org.apache.axis.handlers.JWSHandler"> org.apache.axis.handlers.http.URLMapper"/> org.apache.axis.transport.local.LocalResponder"/> org.apache.axis.handlers.SimpleAuthenticationHandler"/> org.apache.axis.handlers.http.HTTPAuthHandler"/> MSG"> //xml.apache.org/axis/wsdd/ RPC"> RPC"style="rpc"use="encoded"> //example2.userguide.samples RPC"> Order"xmlns: myNS="urn: BeanService"languageSpecificType="java: samples.userguide.example5.Order"/> 其中要发布的每个service都需要加上一个service的节点描述,其他多余的servie节点可以删除的,这样重启tomcat后,我们就可以以http: //localhost: 8080/services/Calculator 来访问这个service了,同样以http: //localhost: 8080/services/Calculator? wsdl访问到它的wsdl描述文件。 二、客户端开发 在开发工具中引进lib下的jar包;然后编写客户端程序 packagesamples.userguide.example2; importorg.apache.axis.client.Call; importorg.apache.axis.client.Service; importorg.apache.axis.encoding.XMLType; importorg.apache.axis.utils.Options; importjavax.xml.rpc.ParameterMode; publicclassCalcClient { publicstaticvoidmain(String[]args)throwsException{ try{ Stringendpoint="https: //localhost: 8440/services/Calculator"; Integeri1=newInteger (1); Integeri2=newInteger (2); Serviceservice=newService(); Callcall=(Call)service.createCall(); call.setTargetEndpointAddress(new.URL(endpoint)); call.setOperationName("add"); call.addParameter("i1",XMLType.XSD_INT,ParameterMode.IN); call.addParameter("i2",XMLType.XSD_INT,ParameterMode.IN); call.setReturnType(XMLType.XSD_INT); Integerret=(Integer)call.invoke(newObject[]{i1,i2}); System.out.println("Gotresult: "+ret); } catch(Exceptione){ e.printStackTrace(); } } } 其中setOperationName就是指定执行的方法,addParameter就是指定参数 运行一下吧 用axis发布webservices (二) 1,什么是Web服务? Web是使应用程序可以以与平台和编程语言无关的方式进行相互通信的一项技术。 Web服务是一个软件接口,它描述了一组可以在网络上通过标准化的XML消息传递访问的操作。 它使用基于XML语言的协议来描述要执行的操作或者要与另一个Web服务交换的数据。 一组以这种方式交互的Web服务在面向服务的体系结构(Service-OrientedArchitecture,SOA)中定义了特殊的Web服务应用程序。 2,什么是SOAP? SOAP(SimpleObjectAccessProtocol)简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的轻量级协议,是一个基于XML的协议。 使用SOAP,不用考虑任何特定的传输协议(最常用的还是HTTP协议),可以允许任何类型的对象或代码,在任何平台上,以任何一种语言相互通信。 SOAP包括四个部分: SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encodingrules),用于表示应用程序需要使用的数据类型的实例;SOAPRPC表示(RPCrepresentation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。 应用中比较关注的是envelop,由一个或多个Header和一个Body组成。 3,什么是Axis? Axis本质上就是一个SOAP引擎(ApacheAxisisanimplementationoftheSOAP),提供创建服务器端、客户端和网关SOAP操作的基本框架。 但Axis并不完全是一个SOAP引擎,它还包括: 是一个独立的SOAP服务器。 是一个嵌入Servlet引擎(例如Tomcat)的服务器。 支持WSDL。 提供转化WSDL为Java类的工具。 提供例子程序。 提供TCP/IP数据包监视工具。 4,Axis相比Soapv2的优点: Axis是第三代ApacheSOAP的实现,从2000年起,SOAPv2开发小组开始讨论如何让Axis更加灵活、可配置,以及能够处理SOAP和来自W3C的各种XML标准。 通过不断地讨论和代码编写,Axis目前相比SOAPV2取得了如下成果: 速度提高。 Axis通过基于事件的SAX对XML文档进行处理,从而在速度和效率上比ApacheSOAP有所提高。 灵活性提高。 稳定性提高。 提供面向组件的部署。 提供一个简洁的传输抽象框架。 其核心引擎完全于传输方式独立。 从而使基于何种协议传输的选择更加灵活。 支持WSDL。 包括WSDL和客户端代码生成等。 5,什么是WSDL? WSDL(WebServiceDescriptionLanguage)Web服务器描述语言是用XML文档来描述Web服务的标准,是Web服务的接口定义语言,由Ariba、Intel、IBM、MS等共同提出,通过WSDL,可描述Web服务的三个基本属性: ·服务做些什么——服务所提供的操作(方法) ·如何访问服务——和服务交互的数据格式以及必要协议 ·服务位于何处——协议相关的地址,如URL WSDL文档以端口集合的形式来描述Web服务,WSDL服务描述包含对一组操作和消息的一个抽象定义,绑定到这些操作和消息的一个具体协议,和这个绑定的一个网络端点规范。 6,什么是WSDD? WSDD就是WEB服务分布描述(WebServiceDeploymentDescriptor),它定义了WEB服务的接口,如服务名、提供的方法、方法的参数等信息。 7,什么是UDDI? UDDI就是统一描述、发现和集成(UniversalDescription,Discovery,andIntegration)。 UDDI用于集中存放和查找WSDL描述文件,起着目录服务器的作用。 Web服务中的角色、操作和构件: 服务提供者。 从企业的角度看,这是服务的所有者。 从体系结构的角度看,这是托管访问服务的平台。 服务请求者。 从企业的角度看,这是要求满足特定功能的企业。 从体系结构的角度看,这是寻找并调用服务,或启动与服务的交互的应用程序。 服务请求者角色可以由浏览器来担当,由人或无用户界面的程序(例如,另外一个Web服务)来控制它。 服务注册中心。 这是可搜索的服务描述注册中心,服务提供者在此发布他们的服务描述。 在静态绑定开发或动态绑定执行期间,服务请求者查找服务并获得服务的绑定信息(在服务描述中)。 对于静态绑定的服务请求者,服务注册中心是体系结构中的可选角色,因为服务提供者可以把描述直接发送给服务请求者。 同样,服务请求者可以从服务注册中心以外的其它来源得到服务描述,例如本地文件、FTP站点、Web站点、广告和服务发现(AdvertisementandDiscoveryofServices,ADS)或发现Web服务(DiscoveryofWebServices,DISCO)。 8,AXIS的几种服务类型: AXIS有四种servicestyles,分别是: RPC,Document,Wrapped,和Message。 最常用的就是RPC和Message。 RPC: 在AXIS中是一个默认选项。 当你部署的时候使用下列两种方式: 或则,它遵循SOAPRPC和编码规则。 每个RPC都包括一个表示名称的外部接点和一些表示参数的内部接点。 AXIS会根据规则将一个XML(WSDL文件)文件转化成一个JAVA对象,并对对想赋上在文件中描述的值。 也可以根据规则将一个JAVA对象转化成XML文件。 Document 适合于老的XMLschema。 Wrapped 和DOCUMENT一样,适合于老的XMLschema。 在大多书情况下,你不许要担心是DOCUMENT服务还是WRAPPED服务。 Message 以这种方式部署的话,会使AXIS失去意义,它使你的代码真正的用XML形式,而不需要转化成JAVA对象。 以这种方式部署的有以下四种服务方法: publicElement[]method(Element[]bodies); publicSOAPBodyElement[]method(SOAPBodyElement[]bodies); publicDocumentmethod(Documentbody); publicvoidmethod(SOAPEnvelopereq,SOAPEnveloperesp); 几种服务类型的主要区别: 基于RPC(远程过程调用)方式,这也是Web服务最常用的方式。 面向消息/文档的的类型跟RPC不同的是它提供了一个更底层的抽象,要求更多的编程工作。 客户端可以传入任何的XML文档,得到的响应不一定是SOAPEnvelope,可以返回任何它所需要的东西,甚至不返回。 虽然这对开发者来说非常的灵活,但是这种通讯类型在实际的应用中并不常见。 面向消息/文档的Web服务主要适合于下面几种情况,比如批量处理,基于表单的数据导入,有需要返回非XML数据时,Web服务器实现中要求直接访问传输层等等 9、java类与wsdl相互生成工具: Axis提供了”WSDL2Java”工具,可以利用wsdl描述来产生服务的Java代理和框架(proxyandskeletons)。 Axis提供了”Java2WSDL”工具,可以由java类生成wsdl文件。 用axis发布webservices(三) 一、对象参数的传递 首先是我们要传输的变量对象Order,代码如下: packagesamples.userguide.example5; publicclassOrder { privateStringcustomerName; privateStringshippingAddress; publicStringgetCustomerName() {returncustomerName;} publicvoidsetCustomerName(Stringname) {customerName=name;} } 要发布的services的代码如下: packagesamples.userguide.example5; publicclassBeanService { publicOrdergetNewOrder(Orderorder) { order.setCustomerName("liuyujun"); returnorder; } } 然后我们只要在配置文件server-config.wsdd里加入下面这段就可以发布了 RPC"> Order"xmlns: myNS="urn: BeanService"languageSpecificTyp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- axis 发布 webservices