| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
| <!-- Generated by Apache Maven Doxia at Apr 17, 2012 -->
|
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
| <head>
|
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
| <title>Apache Axis2 - |
| |
| RESTful Web Services Support</title>
|
| <style type="text/css" media="all">
|
| @import url("../css/maven-base.css");
|
| @import url("../css/maven-theme.css");
|
| @import url("../css/site.css");
|
| </style>
|
| <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
|
| <meta name="Date-Revision-yyyymmdd" content="20120417" />
|
| <meta http-equiv="Content-Language" content="en" />
|
| <meta http-equiv="content-type" content="" />
|
| </head>
|
| <body class="composite">
|
| <div id="banner">
|
| <a href="http://www.apache.org/" id="bannerLeft">
|
| <img src="http://www.apache.org/images/asf_logo_wide.png" alt="Apache Axis2" />
|
| </a>
|
| <a href="" id="bannerRight">
|
| <img src="../images/axis.jpg" alt="Apache Axis2" />
|
| </a>
|
| <div class="clear">
|
| <hr/>
|
| </div>
|
| </div>
|
| <div id="breadcrumbs">
|
|
|
|
|
| <div class="xleft">
|
| <span id="publishDate">Last Published: 2012-04-17</span>
|
| | <span id="projectVersion">Version: 1.6.2</span>
|
| </div>
|
| <div class="xright"> <a href="../index.html" title="Axis2/Java">Axis2/Java</a>
|
| |
|
| <a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a>
|
|
|
|
|
| </div>
|
| <div class="clear">
|
| <hr/>
|
| </div>
|
| </div>
|
| <div id="leftColumn">
|
| <div id="navcolumn">
|
|
|
|
|
| <h5>Axis2/Java</h5>
|
| <ul>
|
| <li class="none">
|
| <a href="../index.html" title="Home">Home</a>
|
| </li>
|
| </ul>
|
| <h5>Downloads</h5>
|
| <ul>
|
| <li class="none">
|
| <a href="../download.cgi" title="Releases">Releases</a>
|
| </li>
|
| <li class="none">
|
| <a href="../modules/index.html" title="Modules">Modules</a>
|
| </li>
|
| <li class="none">
|
| <a href="../tools/index.html" title="Tools">Tools</a>
|
| </li>
|
| </ul>
|
| <h5>Documentation</h5>
|
| <ul>
|
| <li class="none">
|
| <a href="../docs/toc.html" title="Table of Contents">Table of Contents</a>
|
| </li>
|
| <li class="none">
|
| <a href="../docs/installationguide.html" title="Installation Guide">Installation Guide</a>
|
| </li>
|
| <li class="none">
|
| <a href="../docs/quickstartguide.html" title="QuickStart Guide">QuickStart Guide</a>
|
| </li>
|
| <li class="none">
|
| <a href="../docs/userguide.html" title="User Guide">User Guide</a>
|
| </li>
|
| <li class="none">
|
| <a href="../docs/jaxws-guide.html" title="JAXWS Guide">JAXWS Guide</a>
|
| </li>
|
| <li class="none">
|
| <a href="../docs/pojoguide.html" title="POJO Guide">POJO Guide</a>
|
| </li>
|
| <li class="none">
|
| <a href="../docs/spring.html" title="Spring Guide">Spring Guide</a>
|
| </li>
|
| <li class="none">
|
| <a href="../docs/webadminguide.html" title="Web Administrator's Guide">Web Administrator's Guide</a>
|
| </li>
|
| <li class="none">
|
| <a href="../docs/migration.html" title="Migration Guide (from Axis1)">Migration Guide (from Axis1)</a>
|
| </li>
|
| </ul>
|
| <h5>Resources</h5>
|
| <ul>
|
| <li class="none">
|
| <a href="../faq.html" title="FAQ">FAQ</a>
|
| </li>
|
| <li class="none">
|
| <a href="../articles.html" title="Articles">Articles</a>
|
| </li>
|
| <li class="none">
|
| <a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki">Wiki</a>
|
| </li>
|
| <li class="none">
|
| <a href="../refLib.html" title="Reference Library">Reference Library</a>
|
| </li>
|
| <li class="none">
|
| <a href="../api/index.html" title="Online Java Docs">Online Java Docs</a>
|
| </li>
|
| </ul>
|
| <h5>Get Involved</h5>
|
| <ul>
|
| <li class="none">
|
| <a href="../overview.html" title="Overview">Overview</a>
|
| </li>
|
| <li class="none">
|
| <a href="../svn.html" title="Checkout the Source">Checkout the Source</a>
|
| </li>
|
| <li class="none">
|
| <a href="../mail-lists.html" title="Mailing Lists">Mailing Lists</a>
|
| </li>
|
| <li class="none">
|
| <a href="../release-process.html" title="Release Process">Release Process</a>
|
| </li>
|
| <li class="none">
|
| <a href="../guidelines.html" title="Developer Guidelines">Developer Guidelines</a>
|
| </li>
|
| <li class="none">
|
| <a href="../siteHowTo.html" title="Build the Site">Build the Site</a>
|
| </li>
|
| </ul>
|
| <h5>Project Information</h5>
|
| <ul>
|
| <li class="none">
|
| <a href="../team-list.html" title="Project Team">Project Team</a>
|
| </li>
|
| <li class="none">
|
| <a href="../issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
|
| </li>
|
| <li class="none">
|
| <a href="http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/" class="externalLink" title="Source Code">Source Code</a>
|
| </li>
|
| <li class="none">
|
| <a href="../thanks.html" title="Acknowledgements">Acknowledgements</a>
|
| </li>
|
| <li class="none">
|
| <a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License">License</a>
|
| </li>
|
| <li class="none">
|
| <a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">Sponsorship</a>
|
| </li>
|
| <li class="none">
|
| <a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">Thanks</a>
|
| </li>
|
| <li class="none">
|
| <a href="http://www.apache.org/security/" class="externalLink" title="Security">Security</a>
|
| </li>
|
| </ul>
|
| <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
|
| <img class="poweredBy" alt="Built by Maven" src="../images/logos/maven-feather.png" />
|
| </a>
|
|
|
|
|
| </div>
|
| </div>
|
| <div id="bodyColumn">
|
| <div id="contentBox">
|
| <!-- ~ Licensed to the Apache Software Foundation (ASF) under one |
| ~ or more contributor license agreements. See the NOTICE file |
| ~ distributed with this work for additional information |
| ~ regarding copyright ownership. The ASF licenses this file |
| ~ to you under the Apache License, Version 2.0 (the |
| ~ "License"); you may not use this file except in compliance |
| ~ with the License. You may obtain a copy of the License at |
| ~ |
| ~ http://www.apache.org/licenses/LICENSE-2.0 |
| ~ |
| ~ Unless required by applicable law or agreed to in writing, |
| ~ software distributed under the License is distributed on an |
| ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| ~ KIND, either express or implied. See the License for the |
| ~ specific language governing permissions and limitations |
| ~ under the License. --><html> |
| |
| <h1>RESTful Web Services Support</h1> |
| |
| <p>This document presents an introduction on REST and REST with HTTP POST and |
| GET.</p> |
| |
| <div class="section"><h2>Content<a name="Content"></a></h2> |
| <ul> |
| <li><a href="#intro">Introduction</a></li> |
| <li><a href="#rest_with_post">Doing REST Web Services with HTTP POST</a> |
| <ul> |
| <li><a href="#sample">Sample REST - HTTP POST Client</a></li> |
| </ul> |
| </li> |
| <li><a href="#rest_with_get">Access a REST Web Service via HTTP GET</a></li> |
| </ul> |
| <a name="intro"></a> |
| |
| <div class="section"><h2>Introduction<a name="Introduction"></a></h2> |
| |
| <p>WSDL 2.0 HTTP Binding defines a way to implement REST (Representational |
| State Transfer) with Web services. Axis2 implements the most defined HTTP |
| binding specification. REST Web services are a reduced subset of the usual |
| Web service stack.</p> |
| |
| <p>The Axis2 REST implementation assumes the following properties:</p> |
| <ol style="list-style-type: decimal"> |
| <li>REST Web services are Synchronous and Request Response in nature.</li> |
| <li>When REST Web services are accessed via GET, the service and the |
| operations are identified based on the URL. The parameters are assumed as |
| parameters of the Web service. In this case, the GET based REST Web |
| services support only simple types as arguments and it should adhere to |
| the <a class="externalLink" href="http://www.w3.org/TR/2006/CR-wsdl20-adjuncts-20060327/#_operation_iri_style">IRI |
| style</a>.</li> |
| <li>POST based Web services do not need a SOAP Envelope or a SOAP Body. |
| REST Web Services do not have Headers and the payload is sent |
| directly.</li> |
| </ol> |
| |
| <p>Axis2 can be configured as a REST Container and can be used to send and |
| receive RESTful Web service requests and responses. REST Web services can be |
| accessed using HTTP GET and POST.</p> |
| <a name="rest_with_post"></a> |
| |
| <div class="section"><h2>REST Web Services with HTTP POST<a name="REST_Web_Services_with_HTTP_POST"></a></h2> |
| |
| <p>If REST is enabled, the Axis2 server will act as both a REST endpoint and |
| a SOAP endpoint. When a message is received, if the content type is text/xml |
| and if the SOAPAction Header is missing, then the message is treated as a |
| RESTful Message, if not it is treated as a usual SOAP Message.</p> |
| |
| <p>On sending a message, whether the message is RESTful or not, can be |
| decided from the client API.<br /> |
| Set a property in the client API.<br /> |
| </p> |
| <div><pre>... |
| Options options = new Options(); |
| options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE); |
| ...</pre></div> |
| <a name="sample"></a> |
| |
| <div class="section"><h3>Sample REST - HTTP POST Client<a name="Sample_REST_-_HTTP_POST_Client"></a></h3> |
| |
| <p>There is an example named, userguide.clients.RESTClient.java found in |
| AXIS2_HOME/samples/userguide/src/userguide/clients which demonstrates the |
| usage of the above. It uses the "echo" operation of the |
| <tt>userguide.example1.MyService </tt>of the |
| AXIS2_HOME/samples/userguide/src/userguide/example1.</p> |
| |
| <p>The class source will be as follows:</p> |
| <div><pre>public class RESTClient { |
| |
| private static String toEpr = "http://localhost:8080/axis2/services/MyService"; |
| |
| public static void main(String[] args) throws AxisFault { |
| |
| Options options = new Options(); |
| options.setTo(new EndpointReference(toEpr)); |
| |
| options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE); |
| |
| ServiceClient sender = new ServiceClient(); |
| sender.engageModule(new QName(Constants.MODULE_ADDRESSING)); |
| sender.setOptions(options); |
| OMElement result = sender.sendReceive(getPayload()); |
| |
| try { |
| XMLStreamWriter writer = XMLOutputFactory.newInstance() |
| .createXMLStreamWriter(System.out); |
| result.serialize(writer); |
| writer.flush(); |
| } catch (XMLStreamException e) { |
| e.printStackTrace(); |
| } catch (FactoryConfigurationError e) { |
| e.printStackTrace(); |
| } |
| } |
| private static OMElement getPayload() { |
| OMFactory fac = OMAbstractFactory.getOMFactory(); |
| OMNamespace omNs = fac.createOMNamespace( |
| "http://example1.org/example1", "example1"); |
| OMElement method = fac.createOMElement("echo", omNs); |
| OMElement value = fac.createOMElement("Text", omNs); |
| value.addChild(fac.createOMText(value, "Axis2 Echo String ")); |
| method.addChild(value); |
| |
| return method; |
| } |
| }</pre></div> |
| <a name="rest_with_get"></a> |
| |
| </div><div class="section"><h2>Access a REST Web Service via HTTP GET<a name="Access_a_REST_Web_Service_via_HTTP_GET"></a></h2> |
| |
| <p>Axis2 allows users to access Web services that have simple type parameters |
| via HTTP GET. For example, the following URL requests the Version Service via |
| HTTP GET. However, the Web service arriving via GET assumes REST. Other |
| parameters are converted into XML and put into the SOAP body.</p> |
| <div><pre>http://127.0.0.1:8080/axis2/services/Version/getVersion</pre></div> |
| <p>The result can be shown in the browser as follows:</p> |
| <img src="images/userguide/http-get-ws.jpg" alt="" /> |
| |
| <p>For example, the following request,</p> |
| <div><pre>http://127.0.0.1:8080/axis2/services/Version/getVersion</pre></div> |
| will be converted into the following SOAP message for processing by |
| Axis2. |
| <div><pre> |
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> |
| <soapenv:Body> |
| <axis2:getVersion xmlns:axis2="http://ws.apache.org/goGetWithREST" /> |
| </soapenv:Body> |
| </soapenv:Envelope> |
| </pre></div> |
| |
| <div class="section"><h2>Resources<a name="Resources"></a></h2> |
| |
| <p>How I Explained REST to My Wife, By Ryan Tomayko- <a class="externalLink" href="http://naeblis.cx/articles/2004/12/12/rest-to-my-wife">http://naeblis.cx/articles/2004/12/12/rest-to-my-wife</a></p> |
| |
| <p>Building Web Services the REST Way, By Roger L. Costello- <a class="externalLink" href="http://www.xfront.com/REST-Web-Services.html"> |
| http://www.xfront.com/REST-Web-Services.html</a></p> |
| |
| <p>Resource-oriented vs. activity-oriented Web services, By James Snell- <a class="externalLink" href="http://www-128.ibm.com/developerworks/webservices/library/ws-restvsoap/">http://www-128.ibm.com/developerworks/webservices/library/ws-restvsoap/</a></p> |
| |
| </html>
|
| </div>
|
| </div>
|
| <div class="clear">
|
| <hr/>
|
| </div>
|
| <div id="footer">
|
| <div class="xright">Copyright © 2004-2012
|
| <a href="http://www.apache.org/">The Apache Software Foundation</a>.
|
| All Rights Reserved.
|
|
|
| </div>
|
| <div class="clear">
|
| <hr/>
|
| </div>
|
| </div>
|
| </body>
|
| </html>
|