Axis2: services.xml的MEP(信息交换模式)配置
=============================
在axis2中使用不同的MEP来处理不同的信息交换格式。
w3提供了8个全局配置:
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
局部配置:
<operation name="getGreeting" mep="http://www.w3.org/2006/01/wsdl/in-out">
<messagerReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
如果配置不正确,会抛出异常。比如,加了一个没有返回值的方法,如果没有加对应的MEP,则抛出异常。
也可使用operation设置相应的MEP:
<Option name="log" mep="http://www.w3.org/2006/01/wsdl/in-out">
<messagerReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</operation>
例如:
<service name="SimpleService1">
<parameter name="ServiceClass">
service.SimpleService
</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
</service>
如何用services.xml的方式发布多个web service?
如果我们发布多个webservice,就需要在services.xml文件配置多个webservice。
配置多个webservice要使用<serviceGroup>元素,一个services.xml元数据放到META-INF目录中,将service和META-INF中只能有一个<serviceGroup>元素,<serviceGroup>元素中可以有0个或者多个<service元素,每个<service>元素表示一个。
webservice:
<serviceGroup>
<service name="service1">.....</service>
<service name="service2">.....</service>
......
</serviceGroup>
例如:
<serviceGroup>
<service name="MyService">
<parameter name="ServiceClass">
service.SimpleService
</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
</service>
<service name="SimpleService1">
<parameter name="ServiceClass">
service.SimpleService
</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
</service>
</serviceGroup>
Restful WebService(1);
Axis2默认下同时支持以SOAP和Restful两种方式调用Web Service,
SOAP方式通过SOAP消息来传递相应的数据。
而Restful的方式是通过HTTP GET请求直接访问的。
因此,Restful方式不支持复制的数据类型,例如二进制文件
在Axis2.xml中可以开启或者关闭Restful:
<parameter name="disableREST" locked="false">
false</parameter>
将<parameter>元素的值改成true就可以关闭Restful.
Restful WebService(2);
Java也可以通过HTTP POST方式通过Restful方式访问webservice,
。但必须在Stub类中设置相应的属性。
使用Eclipse开发WebService
1.新建一个java project;
2.新建类;
3.然后新建一个META-INF目录;
4.在META-INF目录中新建一个services.xml
5.导出类和META-INF目录成jar(arr),发布到tomcat即可。
Restful WebService,使用SOAP消息传输数据会有大量数据冗余,
如果想节省带宽,可以用Restful WebService,但不能传
比较复杂的数据的类型。