JAX-RS Advanced
This sample shows some advanced functionalities of REST-based Web Services using JAX-RS (JSR-311). Please note that this sample was called jaxrs_sample_02 in the AS 5.1.0 release. It has been renamed to provide better clarity.
Building the sample
- Open a command line, and navigate to the
<AS_HOME>\samples\Jaxws-Jaxrs\jaxrs_starbucks_service
directory. - Run the relevant command to deploy the web app:
Using Maven
Create a WAR file for the sample using the following command:
mvn clean install
Deploy the generated WAR file on WSO2 AS with the related logs on the console:
mvn -Pdeploy
Using Ant
ant
Start the WSO2 Application Server by executing one of the following commands, where
<PRODUCT_HOME>
is the directory where you installed the product distribution:OS Command On Windows <PRODUCT_HOME>\bin\wso2server.bat --run
On Linux/Solaris sh <PRODUCT_HOME>/bin/wso2server.sh
Log in to the management console and click List on the Main menu, under Manage/Applications. This opens the Running Applications page. The deployed applications will be listed here.
- You can open the required web application by clicking the Find Services action.
Running the sample
This JAX-RS webapp provides following services:
- A RESTful Starbucks outlet service is provided on URL http://localhost:9763/jaxrs_starbucks_service/services/Starbucks_Outlet_Service (say serviceURL). Users access this URI to perform operations of drink orders.
A HTTP GET request to URL ${serviceURL}/orders/123 returns a drink order added with the generated id 123. The JSON document returns:
{ "Order":{ "orderId":"123", "drinkName":"Vanilla Flavored Coffee", "additions":"Milk", "locked":false } }
A HTTP POST request to URL ${serviceURL}/orders with the following data adds an order.
<Order> <drinkName>Mocha Flavored Coffee</drinkName> <additions>Caramel</additions> </Order>
An id for this order is generated at server-side and returned in the response. The response body looks like the following in JSON format.
{"Order":{ "additions":"Caramel", "drinkName":"Mocha Flavored Coffee", "locked":false, "orderId":"ee1a9ec2-c8a5-4afe-8585-74df591f9990" }}
A HTTP PUT request to URL ${serviceURL}/orders with the following data, where the 'orderId' is set to the one received in the response body when the order was added:
{ "Order":{ "orderId":"ee1a9ec2-c8a5-4afe-8585-74df591f9990", "additions":"Chocolate Chip Cookies" } }
It updates the 'additions' of the order "ee1a9ec2-c8a5-4afe-8585-74df591f9990" from "Caramel" to "Chocolate Chip Cookies". The response will be in XML-format as follows.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Order> <additions>Chocolate Chip Cookies</additions> <drinkName>Full Leaf Green Tea</drinkName> <locked>true</locked> <orderId>ee1a9ec2-c8a5-4afe-8585-74df591f9990</orderId> </Order>
- A HTTP DELETE request to URL ${serviceURL}/orders/ee1a9ec2-c8a5-4afe-8585-74df591f9990 with an empty request body will delete the order details of order "ee1a9ec2-c8a5-4afe-8585-74df591f9990".
The client code demonstrates how to send HTTP GET/POST/PUT/DELETE requests whereas the server code demonstrates how to build a RESTful endpoint through JAX-RS (JSR-311) APIs.