通过Axis2发布WebService服务端

1.配置web.xml

    在web,xml中需要加入如下代码:


    
        AxisServlet
        org.apache.axis2.transport.http.AxisServlet
        1
    
    
        AxisServlet
        /services/*
    

   其中可以根据需要自行配置。

2.服务部署

   Axis2使用service.xml来部署服务,具体步骤如下:

   首先,需要在WEB-INF下的service文件夹中新建文件用于部署服务,名称自取。

   其次在该文件下新建文件夹META-INF用于存放部署文件。

   最后,在META-INF中新建service.xml文件,该文件用于服务的部署。

  文档结构如图所示

  通过Axis2发布WebService服务端_第1张图片

  3.配置service.xml文件

  整个service.xml文档结构类似如下:



	测试接口服务
	
	
                com.test.TestServer
	
	
		
	
	
		
		
	
		
		
	
  

    3.1部署单个服务

    部署单个服务使用标签。

    name属性指明该服务的名称,若不指定,则默认使用该服务在Axis中的包名作为服务名。

    targetNamespace属性指明该服务的命名空间,服务目标名字空间仅仅在WSDL生成过程中起作用。在运行时,如果有人试图使用?wsdl来查看WSDL,那么生成的WSDL文件中的目标名字空间就是services.xml文件中指定的值。同时,我们为了使用自定义的WSDL文件,把WSDL文件放到META-INF目录中,这种情况下要覆盖原有的目标名字空间,也是通过往services.xml文件中添加目标名字空间来实现的。目标名字空间的缺省值是http://ws.apache.org/axis2。

    Axis2中Web服务有四种会话范围。如果不指定,则默认为 request 会话范围。我们可以通过给 service 节点添加一个可选的 scope参数来指定会话范围,会话范围共有如下四种:

  1. application : 应用级别。生命周期和Axis2引擎生命周期相同。
  2. soapsession : 使用addressing headers中的自定义引用属性来管理会话。
  3. transportsession : 使用transport cookies来管理会话,生命周期和底层的transport相同。
  4. request :生命周期很短,和请求处理周期相同。

    对于该服务中的所有配置,都定义在标签中。


    ......

   3.2部署多个服务

    当需要在一个service.xml中管理多个服务时,使用标签,将所有要部署的服务放入中。其中的各个service的名称不能相同。


    
    ......
    
    
    ......
    

  3.3服务描述

    服务编写者可以使用元素来描述该服务。在Axis2 Web管理控制台中查看服务时,我们只能看到服务名和服务描述。如果我们不给services.xml文件添加description元素,则服务描述栏会显示服务名称。对于那些访问该服务的用户来说,服务描述是非常有用的。添加服务描述信息非常简单,给services.xml文件添加一个可选的description节点就可以了。该节点的值既可以是纯文本,也可以是HTML代码片段。

接口服务


  3.4服务级参数

    服务级参数通过来指定,这些参数供消息上下文(在运行时)、AxisService或者AxisOperation访问。参数有一个必选参数和可选参数:参数名称是必选参数,locked 属性是可选参数。

    locked属性指明了是否允许参数值被子节点覆盖。举例来说,如果我们在axis2.xml文件中添加了一个locked属性值为true的参数,那么如果服务试图在services.xml文件中定义同名参数,是会抛出异常的。

    服务级参数中有一个特殊的参数“ServiceClass”,该参数用于指定服务的具体实现类。但是在Axis2中,Web服务并不强制要求指定服务实现类!Axis2架构允许编写没有服务实现类的Web服务,这是因为消息接收器允许这样做。Axis2中,一旦请求交予消息接收器处理,Axis2引擎就认为自己的事情做完了,剩余工作都是消息接收器的了。因此,services.xml并不强制要求提供服务实现类。但是绝大多数情况下,我们还是需要服务类的,我们可以在services.xml文件中添加ServiceClass参数来指定服务类。该参数的值是服务类的全路径名。


        ......
	com.test.TestServer
	
        ShangHai
	
        ......

  3.5服务级消息接收器

    Axis2中消息接收器是特殊的处理器,是In路径(请求路径)中的最后一个处理器。Web服务中的每个操作都有他自己的消息接收器,而且不同的操作可以有不同的消息接收器。消息接收器是依赖于消息交换模式的,所以我们必须为不同的消息交换模式指定不同的消息接收器。

   怎样才能给所有的操作指定相同的消息接收器呢?只要添加服务级消息接收器即可。如此我们就不必在操作级别指定消息接收器了。我们要做的是指定服务级消息接收器。而在部署时,Axis2会自动给操作选择正确的消息接收器。

   其中RPCInOnlyMessageReceiver用于处理不含返回值的请求。RPCMessageReceiver用于处理带返回值的请求。









  3.6排除方法

  Axis2在发布服务时会默认暴露指定的服务实现类中的所有public方法(如果是用java实现),如果我们把.wsdl文件放到META-INF目录中,而由不希望发布文件中的所有操作,那么我们可以添加标签来排除那些不希望暴露的操作。



      op1



  3.6暴露方法

   Axis2用标签来声明需要暴露的方法以及重定义指定方法的某些属性。其中的name属性需要与实现类中的方法名相同。

   在方法级别可以使用为该方法指定消息接收器。

   使用来为该方法添加别名。actionMapping相当于操作的别名。我们可以为操作添加任意数量的别名。我们可以根据ActionMapping来过滤请求,也可以为不同的action mapping 执行不同的处理逻辑。客户端请求消息中通过指定SOAPAction或者wsa:action来发送action mapping。这样Axis2的分发器就可以把请求消息分发给正确的操作。



mapping1

http://foo.org/doSmt





  3.7部署定义

    当生成WSDL文件(运行时)或者生成schema(部署时)的时候,如果在META-INF目录中找不到WSDL文件,则可以通过往services.xml文件中添加节点来指定自定义的schema。

    在部署的时候,如果不指定schema目标名字空间,则根据服务实现类的全路径名来生成目标名字空间。例如,如果服务类的全路径名是org.apache.axis2.FooService,那生成的schema名字空间是http://FooService.axis2.apache.org/xsd,如果你想使用自定义值,只需要在节点中指定schemaNamespace属性即可。

    在使用Java类生成WSDL文件时,WSDL文件中schema定义中的elementFormDefault默认是设置为qualified。如果qualified为true,则响应消息中的所有元素都是受限的。但是有些时候我们并不需要这种行为,我们希望把elementFormDefault设置为unqualified。这时我们只需要在中重定义elementFormDefaultQualified属性即可。







3.8在指定的传输通道上暴露服务

    Axis2可以在多种传输通道上暴露服务,这是通过Lister Manager完成的。例如,使用Listener Manager你可以在HTTP和TCP上暴露服务。

    由于Axis2支持多种传输通道,所以我们可以在选定的传输通道上暴露服务。比如说系统管理服务,我们希望该服务只在支持SSL的通道上暴露,这样才能保证系统管理的安全性。

    当服务端支持多种传输通道时,所有的服务都是在所有的通道上暴露的。如果只希望在选定的通道上暴露服务,我们需要在services.xml文件中添加标签。



https



  3.9使用模块

    我们可以在服务级和方法级使用指定的模块,使用引用指定的模块,如果引用的模块错误,会导致该模块影响的服务和方法不可用。
















通过Axis2发布WebService服务端_第2张图片

你可能感兴趣的:(通过Axis2发布WebService服务端)