您的位置:首页 > 其它

使用axis开发web service

2015-08-25 18:11 375 查看
1.web service的定义

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>

4000
  <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服务
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: