From 425a59043d2bbae074335436e830e3b59dfe9278 Mon Sep 17 00:00:00 2001 From: Inderjeet Singh Date: Tue, 20 Jul 2010 00:31:33 +0000 Subject: [PATCH] Added an example of a servlet class that uses Gson for web-service implementation. --- wsexample/server/pom.xml | 242 ++++++++++++++++++ .../gson/wsexample/server/MainServlet.java | 66 +++++ 2 files changed, 308 insertions(+) create mode 100644 wsexample/server/pom.xml create mode 100644 wsexample/server/src/main/java/com/google/gson/wsexample/server/MainServlet.java diff --git a/wsexample/server/pom.xml b/wsexample/server/pom.xml new file mode 100644 index 00000000..8215b3d6 --- /dev/null +++ b/wsexample/server/pom.xml @@ -0,0 +1,242 @@ + + + + + 4.0.0 + com.google.code.gson + wsexampleserver + jar + 0.1 + Gson Web Service Example Client + An example for Writing Clients for JSON based Web-services + + + local.repo + file repository to svn + file://${basedir}/../../../mavenrepo + + + + + gson + http://google-gson.googlecode.com/svn/mavenrepo + + true + + + true + + + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + scm:svn:http://google-gson.googlecode.com/svn/trunk/wsexample/server + scm:svn:https://google-gson.googlecode.com/svn/trunk/wsexample/server + http://google-gson.codegoogle.com/svn/trunk/wsexample/server + + + Google Code Issue Tracking + http://code.google.com/p/google-gson/issues/list + + + + + + + com.google.code.gson + gson + 1.5 + compile + + + com.google.code.gson + wsdef + 0.1 + compile + + + com.google.code.gson + wsf + 0.1 + compile + + + com.google.code.gson + wsexampledef + 0.1 + compile + + + + + javax.servlet + servlet-api + 2.4 + provided + + + + junit + junit + 3.8.2 + test + + + + + wsexampleserver + + + org.apache.maven.plugins + maven-compiler-plugin + 2.0.2 + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-eclipse-plugin + 2.5.1 + + true + true + ../../eclipse-ws + file:///${basedir}/../../lib/gson-formatting-styles.xml + 1.5 + + + + org.apache.maven.plugins + maven-install-plugin + 2.2 + + + + org.mortbay.jetty + maven-jetty-plugin + 6.0.1 + + 10 + + + + org.apache.maven.plugins + maven-jxr-plugin + + + + org.apache.maven.plugins + maven-source-plugin + + + attach-sources + verify + + jar + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + src/main/resources/javadoc-descriptor.xml + + http://java.sun.com/j2se/1.5.0/docs/api/ + + true + true + public + + + + org.apache.maven.plugins + maven-pmd-plugin + + 1.5 + + /rulesets/basic.xml + /rulesets/imports.xml + /rulesets/unusedcode.xml + /rulesets/finalizers.xml + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + config/maven_checks.xml + + + + org.codehaus.mojo + taglist-maven-plugin + + + TODO + @todo + FIXME + XXX + + + + + org.codehaus.mojo + cobertura-maven-plugin + + + clean + + clean + + + + + + org.apache.maven.plugins + maven-release-plugin + + -DenableCiProfile=true + + + + maven-assembly-plugin + 2.2-beta-2 + + src/main/resources/assembly-descriptor.xml + wsexampleserver-${version} + target/dist + target/assembly/work + + + + + + + Inderjeet Singh + Google Inc. + + + diff --git a/wsexample/server/src/main/java/com/google/gson/wsexample/server/MainServlet.java b/wsexample/server/src/main/java/com/google/gson/wsexample/server/MainServlet.java new file mode 100644 index 00000000..e72b43d3 --- /dev/null +++ b/wsexample/server/src/main/java/com/google/gson/wsexample/server/MainServlet.java @@ -0,0 +1,66 @@ +// Copyright 2010 Google Inc. All Rights Reserved. + +package com.google.gson.wsexample.server; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.example.model.Cart; +import com.google.gson.example.model.Order; +import com.google.gson.example.model.TypedKeys; +import com.google.gson.example.service.SampleJsonService; +import com.google.gson.webservice.definition.HeaderMap; +import com.google.gson.webservice.definition.RequestBody; +import com.google.gson.webservice.definition.RequestSpec; +import com.google.gson.webservice.definition.ResponseBody; +import com.google.gson.webservice.definition.ResponseSpec; +import com.google.gson.webservice.definition.WebServiceCallSpec; +import com.google.gson.webservice.definition.WebServiceRequest; +import com.google.gson.webservice.definition.WebServiceResponse; +import com.google.gson.webservice.typeadapters.RequestBodyGsonConverter; +import com.google.gson.webservice.typeadapters.ResponseBodyGsonConverter; +import com.google.gson.wsf.server.RequestReceiver; +import com.google.gson.wsf.server.ResponseSender; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * An example servlet that receives JSON web-service requests + * + * @author inder + */ +public class MainServlet extends HttpServlet { + @Override + public void service(HttpServletRequest req, HttpServletResponse res) { + // construct specs + WebServiceCallSpec spec = SampleJsonService.PLACE_ORDER; + RequestSpec requestSpec = spec.getRequestSpec(); + ResponseSpec responseSpec = spec.getResponseSpec(); + // construct gson instance + Gson gson = new GsonBuilder() + .registerTypeAdapter(RequestBody.class, + new RequestBodyGsonConverter(requestSpec.getBodySpec())) + .registerTypeAdapter(ResponseBody.class, + new ResponseBodyGsonConverter(responseSpec.getBodySpec())) + .create(); + RequestReceiver requestReceiver = new RequestReceiver(gson, requestSpec); + WebServiceRequest webServiceRequest = requestReceiver.receive(req); + RequestBody requestBody = webServiceRequest.getBody(); + Cart cart = requestBody.get(TypedKeys.RequestBody.CART); + String authToken = webServiceRequest.getHeader(TypedKeys.Request.AUTH_TOKEN); + Order order = placeOrder(cart, authToken); + + HeaderMap responseHeaders = new HeaderMap.Builder(responseSpec.getHeadersSpec()).build(); + ResponseBody responseBody = new ResponseBody.Builder(responseSpec.getBodySpec()) + .put(TypedKeys.ResponseBody.ORDER, order) + .build(); + WebServiceResponse response = new WebServiceResponse(responseHeaders, responseBody); + ResponseSender responseSender = new ResponseSender(gson); + responseSender.send(res, response); + } + + private Order placeOrder(Cart cart, String authToken) { + return new Order(cart, "Order123"); + } +}