浏览 4687 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-17
web service可以看成是面向服务的体系架构的一种实现方式.在这个架构中,有服务提供者,服务使用者,服务注册中心.WSDL,SOAP,以及UDDI是基本的Web服务规范.WSDL用来描述服务;UDDI用来注册和查找服务;而SOAP,作为传输层,用来在消费者和服务提供者之间传送消息。SOAP是Web服务的默认机制,其他的技术为可以服务实现其他类型的绑定。一个消费者可以在UDDI注册表(registry)查找服务,取得服务的WSDL描述,然后通过SOAP来调用服务。 1)服务提供者 一个可通过网络寻址的实体,它接受和执行来自使用者的请求。 它将自己的服务和接口契约发布到服务注册中心,以便服务使用者可以发现和访问该服务。 2)服务使用者 一个应用程序、一个软件模块或需要一个服务的另一个服务。 它发起对注册中心中的服务的查询,通过传输绑定服务,并且执行服务功能。 服务使用者根据接口契约来执行服务。 3)服务注册中心 服务发现的支持者;它包含一个可用服务的存储库,并允许感兴趣的服务使用者查找服务提供者接口。在实际应用中,通常用axis来搭建服务注册中心.所有的服务都通过service-config.wsdd进行描述.server-config.wsdd一般是放在项目的WEB-INF下 2.axis的开发环境搭建 项目的开发环境:java1.5,tomcat6,Axis1.4 在项目的动态连接库中加入Axis所需的包:axis.jar;axis-ant.jar;commons-discovery-0.2.jar;commons-logging-1.0.4.jar;jaxrpc.jar;log4j-1.2.8.jar;saaj.jar;wsdl4j-1.5.1.jar;activation.jar;mail.jar. web.xml加入相关定义 <display-name>Apache-Axis</display-name> <servlet> <display-name>Apache-Axis Servlet</display-name> <servlet-name>AxisServlet</servlet-name> <servlet-class> org.apache.axis.transport.http.AxisServlet </servlet-class> </servlet> <servlet> <display-name>Axis Admin Servlet</display-name> <servlet-name>AdminServlet</servlet-name> <servlet-class> org.apache.axis.transport.http.AdminServlet </servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> 3.用axis发布webservice的方法 用axis发布webservice的方法有3种: 1)即时发布 编译好类文件,把扩展名改成jws,然后放到axis的目录下,因为axis目录下默认有web.xml定义,用org.apache.axis.transport.http.AxisServlet来解析*.jws文件。 2)手动发布 也就是写部署文件deploy.wsdd,这个文件里已经写了入口地址,运行java org.apache.axis.client.AdminClient即可完成部署. 访问的时候一般是http://127.0.0.1:8080/axis/services/入口地址. 3)自动部署 要编写server-config.wsdd,配置web.xml,发布和普通的web程序发布一样,入口地址也已经写到server-config.wsdd里了,查看的时候就是http://127.0.0.1:8080/你的发布webapp/services/入口地址 Java类映射到WSDL的规则,请参考JAX-RPC规范 服务发布以后,就可以在IE浏览器里看到它的WSDL,一般是服务的URL后面加一个“?wsdl” 4.AXIS的几种服务类型 AXIS有四种service styles,分别是:RPC, Document, Wrapped, 和Message。最常用的就是RPC和Message。 1)RPC服务 这个服务是axis默认的服务。我们在前面的例子中写的就是rpc服务。<service ... provider="java:RPC"> 。rpc服务遵从soap rpc规范和编码规则,意味着来自rpc服务的xml将类似上面例子中的“echoString”--每个rpc调用被模块化为一个外部元素,匹配操作名称,并包含了很多内部元素,每一个都是操作的一个参数。axis将把这些xml转化为java对象,配送给你得服务,并将序列化来自服务的java对象为xml.因为rpc服务默认采用soap section 5规则,对象将会通过"multi-ref" 序列化来编码。 2)Document / Wrapped 服务 这2个服务很类似,都不需要用soap编码来处理数据。他就是一个普通的xml格式。无论哪种情况,axis还是对他们做了xml到java得绑定,所以你最终处理的还是java对象,而不是xml结构的字符串。 下面的例子来说明他们2个之间的区别。 <soap:Envelope xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <soap:Body> <myNS:PurchaseOrder xmlns:myNS="http://commerce.com/PO"> <item>SK001</item> <quantity>1</quantity> <description>Sushi Knife</description> </myNS:PurchaseOrder> </soap:Body> </soap:Envelope>相关的PurchaseOrder类型定义如下: <schema targetNamespace="http://commerce.com/PO"> <complexType name="POType"> <sequence> <element name="item" type="xsd:string"/> <element name="quantity" type="xsd:int"/> <element name="description" type="xsd:string"/> </sequence> </complexType> <element name="PurchaseOrder" type="POType"/> </schema>对于一个document服务来说,他将对应到这样的方法: public void method(PurchaseOrder po) 而对于wrapped服务来说,他对应于下面的方法: public void purchaseOrder(String item, int quantity, String description) 3)Message 服务 当你需要处理纯xml而不是java对象时,你将会用到这种服务。 message服务的方法有4种签名 public Element [] method(Element [] bodies); public SOAPBodyElement [] method (SOAPBodyElement [] bodies); public Document method(Document body); public void method(SOAPEnvelope req, SOAPEnvelope resp); 5.axis生成web service客户端的调用框架 用Axis的wsdl2java生成Web service的客户端的调用框架,wsdl2java生成的客户端的调用框架是stub方式的。它包括endpoint接口、实现该接口的stub,serviceLocator.通过服务端提供WSDL信息来生成客户端的调用框架. 有了web service客户端的调用框架,客户端stub存根方式调用web服务 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |