在web,xml中需要加入如下代码:
AxisServlet
org.apache.axis2.transport.http.AxisServlet
1
AxisServlet
/services/*
其中
Axis2使用service.xml来部署服务,具体步骤如下:
首先,需要在WEB-INF下的service文件夹中新建文件用于部署服务,名称自取。
其次在该文件下新建文件夹META-INF用于存放部署文件。
最后,在META-INF中新建service.xml文件,该文件用于服务的部署。
文档结构如图所示
整个service.xml文档结构类似如下:
测试接口服务
com.test.TestServer
部署单个服务使用
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参数来指定会话范围,会话范围共有如下四种:
对于该服务中的所有配置,都定义在
......
当需要在一个service.xml中管理多个服务时,使用标签
......
......
服务编写者可以使用
接口服务
服务级参数通过
locked属性指明了是否允许参数值被子节点覆盖。举例来说,如果我们在axis2.xml文件中添加了一个locked属性值为true的参数,那么如果服务试图在services.xml文件中定义同名参数,是会抛出异常的。
服务级参数中有一个特殊的参数“ServiceClass”,该参数用于指定服务的具体实现类。但是在Axis2中,Web服务并不强制要求指定服务实现类!Axis2架构允许编写没有服务实现类的Web服务,这是因为消息接收器允许这样做。Axis2中,一旦请求交予消息接收器处理,Axis2引擎就认为自己的事情做完了,剩余工作都是消息接收器的了。因此,services.xml并不强制要求提供服务实现类。但是绝大多数情况下,我们还是需要服务类的,我们可以在services.xml文件中添加ServiceClass参数来指定服务类。该参数的值是服务类的全路径名。
......
com.test.TestServer
ShangHai
......
Axis2中消息接收器是特殊的处理器,是In路径(请求路径)中的最后一个处理器。Web服务中的每个操作都有他自己的消息接收器,而且不同的操作可以有不同的消息接收器。消息接收器是依赖于消息交换模式的,所以我们必须为不同的消息交换模式指定不同的消息接收器。
怎样才能给所有的操作指定相同的消息接收器呢?只要添加服务级消息接收器即可。如此我们就不必在操作级别指定消息接收器了。我们要做的是指定服务级消息接收器。而在部署时,Axis2会自动给操作选择正确的消息接收器。
其中RPCInOnlyMessageReceiver用于处理不含返回值的请求。RPCMessageReceiver用于处理带返回值的请求。
Axis2在发布服务时会默认暴露指定的服务实现类中的所有public方法(如果是用java实现),如果我们把.wsdl文件放到META-INF目录中,而由不希望发布文件中的所有操作,那么我们可以添加
op1
Axis2用
在方法级别可以使用
使用
mapping1
http://foo.org/doSmt
当生成WSDL文件(运行时)或者生成schema(部署时)的时候,如果在META-INF目录中找不到WSDL文件,则可以通过往services.xml文件中添加
在部署的时候,如果不指定schema目标名字空间,则根据服务实现类的全路径名来生成目标名字空间。例如,如果服务类的全路径名是org.apache.axis2.FooService,那生成的schema名字空间是http://FooService.axis2.apache.org/xsd,如果你想使用自定义值,只需要在
在使用Java类生成WSDL文件时,WSDL文件中schema定义中的elementFormDefault默认是设置为qualified。如果qualified为true,则响应消息中的所有元素都是受限的。但是有些时候我们并不需要这种行为,我们希望把elementFormDefault设置为unqualified。这时我们只需要在elementFormDefaultQualified
属性即可。
Axis2可以在多种传输通道上暴露服务,这是通过Lister Manager完成的。例如,使用Listener Manager你可以在HTTP和TCP上暴露服务。
由于Axis2支持多种传输通道,所以我们可以在选定的传输通道上暴露服务。比如说系统管理服务,我们希望该服务只在支持SSL的通道上暴露,这样才能保证系统管理的安全性。
当服务端支持多种传输通道时,所有的服务都是在所有的通道上暴露的。如果只希望在选定的通道上暴露服务,我们需要在services.xml文件中添加
https
我们可以在服务级和方法级使用指定的模块,使用