(原)
Axis2
的
RPC
和
AXIOM
两种方式
因为项目需要在浏览器上调用
webservice
,在浏览器上返回自定义的
xml
格式结果,不需要返回
soap
封装后的结果,故使用如下方式实现
项目结构
src
--com.lucky.ws
----AdminService.java
--META-INF
----services.xml
package
com.lucky.ws;
import
org.apache.axiom.om.OMAbstractFactory;
import
org.apache.axiom.om.OMElement;
import
org.apache.axiom.om.OMFactory;
import
org.apache.axiom.om.OMNamespace;
public
class
AdminService {
/*
* RPC
方式
* public String
validate(String format, String component){
System.out.println("afdasfasfdad");
return "<?xml version=\"1.0\"
encoding=\"UTF-8\"?>"
+"admin>"
+"status>"
+"name>Server</name>"
+"value>[ok|fail]</value>"
+"/status>";
}*/
/*
*
使用
AXIOM
方式
*/
public
OMElement validate(OMElement e){
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs =
fac.createOMNamespace(
""
,
"tns"
);
OMElement admin = fac.createOMElement(
"admin"
, omNs);
OMElement status = fac.createOMElement(
"status"
, omNs);
admin.addChild(status);
OMElement name = fac.createOMElement(
"name"
, omNs);
name.addChild(fac.createOMText(name,
"Service"
));
status.addChild(name);
OMElement value = fac.createOMElement(
"value"
, omNs);
value.addChild(fac.createOMText(value,
"[ok|fail]"
));
status.addChild(value);
OMElement status2 =
fac.createOMElement(
"status"
, omNs);
admin.addChild(status2);
OMElement name2 = fac.createOMElement(
"name"
, omNs);
name2.addChild(fac.createOMText(name2,
"Error"
));
status2.addChild(name2);
OMElement value2 = fac.createOMElement(
"value"
, omNs);
value2.addChild(fac.createOMText(value2,
"msg"
));
status2.addChild(value2);
return
admin;
}
}
<!--
使用
RPC
方式,这种方式如果在浏览器上直接使用
url
调用的话,返回结果是
soap
封装格式,这种方式在
WS
的方法参数和返回值上可以用户自定义(原始数据类型)
<service
name="admin" scope="application">
<messageReceivers>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter
name="ServiceClass">com.lucky.ws.AdminService</parameter>
</service>
-->
<!--
使用
AXIOM
方式,这种方式可以用户自己在代码中定义对象结构,在浏览器上可以返回用户自定义的
xml
格式,但是对应的
WS
方法的参数和返回值必须为
final OMElement
类型
-->
<service name=
"admin"
scope=
"application"
>
<operation
name=
"validate"
>
<messageReceiver class=
"org.apache.axis2.receivers.RawXMLINOutMessageReceiver"
/>
</operation>
<parameter
name=
"ServiceClass"
>
com.lucky.ws.AdminService
</parameter>
</service>
部署:
启动
tomcat
在
Eclipse
中在项目
src
目录上右键,导出为
aar
包,将该包放入
tomcat_home\webapps\axis2\WEB-INF\services
下,
tomcat
会自动部署,
访问:
在浏览器上访问:
http://localhost:8080/axis2/services
/admin/validate?format=xml&component=aa
说明:
http://localhost:8080/axis2/services
所有
webservice
都一样
/admin
在
services.xml
中定义的
webservice
/validate
在
services.xml
中定义暴漏的
WS
方法
?format=xml&component=aa
参数随便(
AXIOM
会将他封装到
OMElement
的
Child
中,调用需要遍历
)