Axis2_webService基于REST学习笔记
2013-05-06 15:48
405 查看
最近在研究REST发布服务的方式,看了几个框架都一头雾水,后来还是用比较熟悉的Axis2来学习,Axis2除了提供传统的webservice方法外,还提供了对Rest的支持。Axis2同时提供WS-*风格的接口和REST风格的接口,Axis2已经可以配置作为REST容器来发送和接收RESTful
Web Service请求和应答。这让Axis2的灵活性、易用性、安全性和可靠性等都得到大幅度地提升。
虽然做了个例子了解了,但真正项目中还没使用到,还需要继续学习吧,有在项目中用过的童鞋也可以互相交流一下。
1、准备工作
新建Axis2Rest工程项目,注意需要自己将jar文件复制到lib下,并加入工程引用。
1)web.xml内容如下:
2)services.xml内容如下:
3)项目目录如下:
4)创建TestWs.java类:
5)打包工程为.aar
然后把.aar包放在tomcat\webapps\axis2\WEB-INF\services下,启动tomcat,
一切正常的话,访问http://localhost:8081/axis2/services/REST_Service?wsdl将会看到如下界面。
2、调用Axis2的rest服务
1)REST_Service提供showName方法,传递rest字符串,如下。http://localhost:8081/axis2/services/REST_Service/showName?name=aaa
从上面可以看出这个就是rest风格,Axis1.0是无法通过showName?name=rest来获取信息的。
2、使用axis客户端调用
说明:
1、sender.engageModule(new QName(Constants.MODULE_ADDRESSING)); axis2-1.5.4不需要下面这句代码,否则会报错
2、客户端REST方式调用服务跟普通服务的区别,就是Rest有下面这个代码;
options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE);
两者返回的数据都是
<ns:showNameResponse xmlns:ns="Resthttp://ws"><ns:return>300</ns:return></ns:showNameResponse>
3、getPayload方法
OMNamespace omNs = fac.createOMNamespace("http://ws", "xsd");指定命名空间,如果没对的话会报如下错误<faultstring>namespace
mismatch requirehttp://ws foundhttp://ws1</faultstring>
OMElement method = fac.createOMElement("showName", omNs);要传递的方法名为 "showName"
OMElement value = fac.createOMElement("name", omNs);传递的参数为name
value.addChild(fac.createOMText(value, "Rest")); 传递参数name的值为Rest。
Web Service请求和应答。这让Axis2的灵活性、易用性、安全性和可靠性等都得到大幅度地提升。
虽然做了个例子了解了,但真正项目中还没使用到,还需要继续学习吧,有在项目中用过的童鞋也可以互相交流一下。
1、准备工作
新建Axis2Rest工程项目,注意需要自己将jar文件复制到lib下,并加入工程引用。
1)web.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app id="wmf" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app>
2)services.xml内容如下:
<service name="AxisService"> <description>AxisService</description> <parameter name="ServiceClass">ws.TestWs</parameter> <operation name="showName"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="getName"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </operation> </service>
3)项目目录如下:
4)创建TestWs.java类:
package ws; public class TestWs { public int showName(String name) { if(name.equals("aaa")) { return 200; } else if(name.equals("bbb")) { return 300; } else { return 400; } } public String getName(String name) { return "hello"; } }
5)打包工程为.aar
然后把.aar包放在tomcat\webapps\axis2\WEB-INF\services下,启动tomcat,
一切正常的话,访问http://localhost:8081/axis2/services/REST_Service?wsdl将会看到如下界面。
2、调用Axis2的rest服务
1)REST_Service提供showName方法,传递rest字符串,如下。http://localhost:8081/axis2/services/REST_Service/showName?name=aaa
从上面可以看出这个就是rest风格,Axis1.0是无法通过showName?name=rest来获取信息的。
2、使用axis客户端调用
package ws; import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axis2.AxisFault; import org.apache.axis2.Constants; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; public class ClientTest { private static String toEpr = "http://localhost:8081/axis2/services/REST_Service"; public static void main(String[] args) { Options options = new Options(); options.setTo(new EndpointReference(toEpr)); options.setTransportInProtocol(Constants.TRANSPORT_HTTP); //客户端REST方式调用服务跟普通服务的区别,REST调用必须加上下面这个代码。 options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE); try { ServiceClient sender = new ServiceClient(); sender.setOptions(options); OMElement result = sender.sendReceive(getPayload()); XMLStreamWriter write = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out); result.serialize(write); } catch (AxisFault e) { e.printStackTrace(); } catch (XMLStreamException e) { e.printStackTrace(); } } private static OMElement getPayload() { OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace("http://ws", "xsd"); OMElement method = fac.createOMElement("showName", omNs); OMElement value = fac.createOMElement("name", omNs); value.addChild(fac.createOMText(value, "bbb")); method.addChild(value); return method; } }
说明:
1、sender.engageModule(new QName(Constants.MODULE_ADDRESSING)); axis2-1.5.4不需要下面这句代码,否则会报错
2、客户端REST方式调用服务跟普通服务的区别,就是Rest有下面这个代码;
options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE);
两者返回的数据都是
<ns:showNameResponse xmlns:ns="Resthttp://ws"><ns:return>300</ns:return></ns:showNameResponse>
3、getPayload方法
OMNamespace omNs = fac.createOMNamespace("http://ws", "xsd");指定命名空间,如果没对的话会报如下错误<faultstring>namespace
mismatch requirehttp://ws foundhttp://ws1</faultstring>
OMElement method = fac.createOMElement("showName", omNs);要传递的方法名为 "showName"
OMElement value = fac.createOMElement("name", omNs);传递的参数为name
value.addChild(fac.createOMText(value, "Rest")); 传递参数name的值为Rest。
相关文章推荐
- WebService基于契约编程的基础-WS-Policy学习笔记
- REST服务学习笔记一、基于JAX-RS 2.0 REST服务几种类型
- axis2 webservice学习笔记一
- Webservice学习笔记五,Web Service实践之REST vs RPC
- Axis2 WebService(基于REST风格)
- webservice 学习笔记,axis2传递简单对象,非stub方式
- webservice学习笔记 --- day03 CXF+Spring+REST
- webservice 学习笔记,axis2 传递对象数组,非stub方式
- WebService学习笔记——AXIS2基础
- axis2 webservice学习笔记一
- Axis2 WebService(基于REST风格)
- WebService学习笔记-使用CXF编写基于Spring的Webservice
- axis2-webservice学习笔记
- MyEclipse学习axis2 WebService学习笔记
- WebService学习笔记5——AXIS2基础
- Webservice学习笔记六,SOAP, REST and XML-RPC报文格式收集
- WebService学习笔记-使用CXF编写基于Spring的Webservice
- WebService学习笔记5——AXIS2基础
- WebService学习笔记5——AXIS2基础
- WebService学习笔记-添加拦截器到基于Spring的Webservice