Axis2_webService基于REST学习笔记
????? 最近在研究REST发布服务的方式,看了几个框架都一头雾水,后来还是用比较熟悉的Axis2来学习,Axis2除了提供传统的webservice方法外,还提供了对Rest的支持。Axis2同时提供WS-*风格的接口和REST风格的接口,Axis2已经可以配置作为REST容器来发送和接收RESTful 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包放在tomcatwebappsaxis2WEB-INFservices下,启动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; } }
说明: 2、客户端REST方式调用服务跟普通服务的区别,就是Rest有下面这个代码; <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。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |