A Web-service example

This commit is contained in:
Inderjeet Singh 2010-07-13 21:47:37 +00:00
parent 8bcbab629a
commit ceb2f8fdb0
6 changed files with 370 additions and 0 deletions

View File

@ -0,0 +1,222 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.code.gson</groupId>
<artifactId>wsexample</artifactId>
<packaging>jar</packaging>
<version>0.1</version>
<name>Gson Web Service Example</name>
<description>An example for Writing Clients for JSON based Web-services</description>
<distributionManagement>
<repository>
<id>local.repo</id>
<name>file repository to svn</name>
<url>file://${basedir}/../../../mavenrepo</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>gson</id>
<url>http://google-gson.googlecode.com/svn/mavenrepo</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<connection>scm:svn:http://google-gson.googlecode.com/svn/trunk/wsexample</connection>
<developerConnection>scm:svn:https://google-gson.googlecode.com/svn/trunk/wsexample</developerConnection>
<url>http://google-gson.codegoogle.com/svn/trunk/wsexample</url>
</scm>
<issueManagement>
<system>Google Code Issue Tracking</system>
<url>http://code.google.com/p/google-gson/issues/list</url>
</issueManagement>
<dependencies>
<!-- Gson: Java to Json conversion -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>1.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>wsdef</artifactId>
<version>0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>wsexample</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
<workspace>../../eclipse-ws</workspace>
<workspaceCodeStylesURL>file:///${basedir}/../lib/gson-formatting-styles.xml</workspaceCodeStylesURL>
<wtpversion>1.5</wtpversion>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.2</version>
<!-- configuration>
<updateReleaseInfo>true</updateReleaseInfo>
<createChecksum>true</createChecksum>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<packaging>jar</packaging>
<classifier>sources</classifier>
<file>target/wsexample-sources.jar</file>
</configuration -->
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.0.1</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
</plugin>
<plugin>
<!-- TODO(inder): add manifest entry for maven group, artifact, and classifier ids -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<phase>verify</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<!-- TODO(inder): add manifest entry for maven group, artifact, and classifier ids -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<archive>src/main/resources/javadoc-descriptor.xml</archive>
<links>
<link>http://java.sun.com/j2se/1.5.0/docs/api/</link>
</links>
<version>true</version>
<useDefaultManifestFile>true</useDefaultManifestFile>
<show>public</show>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<configuration>
<targetJdk>1.5</targetJdk>
<rulesets>
<ruleset>/rulesets/basic.xml</ruleset>
<ruleset>/rulesets/imports.xml</ruleset>
<ruleset>/rulesets/unusedcode.xml</ruleset>
<ruleset>/rulesets/finalizers.xml</ruleset>
</rulesets>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<!-- configLocation>config/sun_checks.xml</configLocation -->
<configLocation>config/maven_checks.xml</configLocation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>taglist-maven-plugin</artifactId>
<configuration>
<tags>
<tag>TODO</tag>
<tag>@todo</tag>
<tag>FIXME</tag>
<tag>XXX</tag>
</tags>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<executions>
<execution>
<id>clean</id>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<arguments>-DenableCiProfile=true</arguments>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-2</version>
<configuration>
<descriptor>src/main/resources/assembly-descriptor.xml</descriptor>
<finalName>wsexample-${version}</finalName>
<outputDirectory>target/dist</outputDirectory>
<workDirectory>target/assembly/work</workDirectory>
</configuration>
</plugin>
</plugins>
</build>
<developers>
<developer>
<name>Inderjeet Singh</name>
<organization>Google Inc.</organization>
</developer>
</developers>
</project>

View File

@ -0,0 +1,34 @@
// Copyright 2010 Google Inc. All Rights Reserved.
package com.google.gson.example.model;
import java.util.List;
/**
* A cart that can be posted to the server
*
* @author inder
*/
public class Cart {
private final List<LineItem> lineItems;
private final String buyerName;
private final String creditCard;
public Cart(List<LineItem> lineItems, String buyerName, String creditCard) {
this.lineItems = lineItems;
this.buyerName = buyerName;
this.creditCard = creditCard;
}
public List<LineItem> getLineItems() {
return lineItems;
}
public String getBuyerName() {
return buyerName;
}
public String getCreditCard() {
return creditCard;
}
}

View File

@ -0,0 +1,38 @@
// Copyright 2010 Google Inc. All Rights Reserved.
package com.google.gson.example.model;
/**
* A line item in a cart
*
* @author inder
*/
public class LineItem {
private final String name;
private final int quantity;
private final long priceInMicros;
private final String currencyCode;
public LineItem(String name, int quantity, long priceInMicros, String currencyCode) {
this.name = name;
this.quantity = quantity;
this.priceInMicros = priceInMicros;
this.currencyCode = currencyCode;
}
public String getName() {
return name;
}
public int getQuantity() {
return quantity;
}
public long getPriceInMicros() {
return priceInMicros;
}
public String getCurrencyCode() {
return currencyCode;
}
}

View File

@ -0,0 +1,27 @@
// Copyright 2010 Google Inc. All Rights Reserved.
package com.google.gson.example.model;
/**
* An order
*
* @author inder
*/
public class Order {
public final Cart postedCart;
public final String orderNumber;
public Order(Cart postedCart, String orderNumber) {
this.postedCart = postedCart;
this.orderNumber = orderNumber;
}
public Cart getPostedCart() {
return postedCart;
}
public String getOrderNumber() {
return orderNumber;
}
}

View File

@ -0,0 +1,26 @@
// Copyright 2010 Google Inc. All Rights Reserved.
package com.google.gson.example.model;
import com.google.gson.webservice.definition.TypedKey;
/**
* Definition of various constants to be used for parameter names of request and response headers,
* and request and response body.
*
* @author inder
*/
public final class TypedKeys {
public static final class Request {
public static final TypedKey<String> AUTH_TOKEN =
new TypedKey<String>("authToken", String.class);
}
public static final class RequestBody {
public static final TypedKey<Cart> CART = new TypedKey<Cart>("cart", Cart.class);
}
public static final class ResponseBody {
public static final TypedKey<Order> ORDER = new TypedKey<Order>("order", Order.class);
}
}

View File

@ -0,0 +1,23 @@
// Copyright 2010 Google Inc. All Rights Reserved.
package com.google.gson.example.service;
import com.google.gson.example.model.TypedKeys;
import com.google.gson.webservice.definition.CallPath;
import com.google.gson.webservice.definition.HttpMethod;
import com.google.gson.webservice.definition.WebServiceCallSpec;
/**
* An example of a web-service definition
*
* @author inder
*/
public class SampleJsonService {
public static final WebServiceCallSpec PLACE_ORDER = new WebServiceCallSpec.Builder(
new CallPath("/placeOrder"))
.supportsHttpMethod(HttpMethod.POST)
.addRequestParam(TypedKeys.Request.AUTH_TOKEN)
.addRequestBodyParam(TypedKeys.RequestBody.CART)
.addResponseBodyParam(TypedKeys.ResponseBody.ORDER)
.build();
}