四、使用services.xml文件发布WebService
前面发布webservices所建立的java类都不能有包名,这里用配置文件services.xml搭建能有包名的webservice
首先创建MyService类,在service包下
package service; import javax.jws.WebParam; public class MyService { public String getGreeting(@WebParam(name="name")String name){ return "Hello " + name; } public void update(@WebParam(name="data")String data) { System.out.println("<" + data + ">已经更新"); } }
然后建立services.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- 一个service元素只能发布一个webservice,name表示这个webservice的名称, 比如用下面的URL可以获得这个 WebService的WSDL内容:http://localhost:8080/axis2/services/MyService?wsdl,name属性指的就是?wsdl前面的那个名称。 建议设置与类名同样的名字 --> <service name = "MyService"> <!-- 对当前webservice的描述 --> <description> WebService example </description> <!-- 设置webservice对应的类名,每个parameter有一个强制的属性(name)和一个可选的属性(locked),locked属性表示是否允许parameter的值被层次中的另一个子结点覆盖 --> <parameter name = "ServiceClass"> service.MyService </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> </service>
一些简单的东西看上面的注释,这里先说一下MEP——Message Exchange Pattern,消息交换模式,它定义了webservices提供方与请求方之间SOAP1.2消息的交换模式。
目前Axis2支持三种模式:In-Only、Robust In-Only和In-Out。In-Only消息交换模式只有SOAP请求,而不需要应答; Robust-In消息交换模式发送SOAP请求,只有在出错的情况下才返回应答;In-Out消息交换模式总是存在SOAP请求和应答。
SOAP支持的模式还有:In-Optional-Out、Out-Only、Robust Out-Only、Out-In、Out-Optional-In等
每个人也可以定义自己的MEP,但SOAP1.2规范要求分配给每个MEP一个唯一的URI以识别它。
像上面的In-Out MEP的URI是http://www.w3.org/2004/08/wsdl/in-out
In-Only MEP的URI是http://www.w3.org/2004/08/wsdl/in-only
使用这种方式发布WebService,必须打包成.aar文件,.aar文件实际上就是改变了扩展名的.jar文件。在现在建立了两个文件:MyService.java和services.xml。将MyService.java编译,生成MyService.class。
services.xml和MyService.class文件的位置如下:
D:\xampp\tomcat\webapps\ws\META-INF\services.xml
D:\xampp\tomcat\webapps\ws\service\MyService.class
在windows控制台中进入ws目录,并输入如下的命令生成.aar文件(实际上,.jar文件也可以发布webservice,但axis2官方文档中建议使用.aar文件发布webservice):
jar cvf ws.aar .(注意最后还有个".",表示将当前目录打包)
最后将ws.aar文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\services目录中,启动Tomcat后,就可以调用这个WebService了。
如果想发布多个WebService,可以使用<serviceGroup>元素,如再建立一个MyService1类
package service public class MyService1 { public String getName() { return "bill"; } }
services.xml如下:
<serviceGroup> <service name="myService"> <description> Web Service例子 </description> <parameter name="ServiceClass"> service.MyService </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> </service> <service name="myService1"> <description> Web Service例子 </description> <parameter name="ServiceClass"> service.MyService1 </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> </service> </serviceGroup>
WebServices学习笔记(四)使用services.xml文件发布WebService