Previous Topic

Next Topic

Book Contents

Book Index

Applying Constraints to Transferred Resource Representations

The following example demonstrates applying of resource representation constraints using the RepresentationConstaints utility:

/**

* {@code BookResourceFactory} provides utility factory methods for creating and initializing various demo resources.

*/

public class BookResourceFactory {

  /**

   * Creates a {@link BookResource} instance and reinitializes its fields based on the {@link Book} instance given as

   * argument. The {@link Book} representation is customized based on the representation constraints given as argument.

   *

   * @param book - {@link Book} instance which fields will be used to initialize new {@link BookResource}'s fields.

   * @param constraints - {@link RepresentationConstraints} instance encapsulating the representation constraints for

   *          the device resource fields

   * @return {@link BookResource}

   */

  public static BookResource getBookResource(Book book, RepresentationConstraints constraints) {

    BookResource newBook = new BookResource();

    if (constraints.include(IdentifiableResourceFields.HREF)) {

      newBook.setHref(UriBuilder.fromPath("/demo/bookstore/books/" + book.getId()).build());

    }

    if (constraints.include(IdentifiableResourceFields.ID)) {

      newBook.setId(book.getId());

    }

    if (constraints.include(BookResourceFields.AUTHOR)) {

      newBook.setAuthor(book.getAuthor());

    }

    if (constraints.include(BookResourceFields.TITLE)) {

      newBook.setTitle(book.getTitle());

    }

    if (constraints.include(BookResourceFields.COUNT)) {

      newBook.setCount(book.getCount());

    }

    return newBook;

  }

  .....

}

A sample transfer of a customized BookResource representation in JSON using HTTP 1.1 protocol:

GET /demo/bookstore/books/3?include=title,author HTTP/1.1

Content-Type: application/json

Accept: application/json

Authorization: Basic YWRtaW46YWRtaW4=

HTTP/1.1 200 OK

Content-Type: application/json

X-Representation-Include: title,author

{

  "title": "The Pragmatic Programmer: From Journeyman to Master",

  "author": "Andrew Hunt"

}

A sample error response reporting an invalid representation constraints syntax error via an ErrorDescription representation in JSON:

GET /demo/bookstore/books/2?include=href,,,, HTTP/1.1

Content-Type: application/json

Accept: application/json

Authorization: Basic YWRtaW46YWRtaW4=

HTTP/1.1 400 Bad Request

Content-Type: application/json

{

  "status": 400,

  "code": 50021,

  "description": "Representation constraints expression has invalid syntax : Empty field name: href,,,,",

  "exception": {

    "name": "org.osgi.framework.InvalidSyntaxException",

    "code": -1,

    "message": "Empty field name: href,,,,",

    "stacktrace": "org.osgi.framework.InvalidSyntaxException: Empty field name: href,,,,

                   com.prosyst.mbs.services.rest.util.BasicUtils.insertComplexExpression(BasicUtils.java:279)

                   com.prosyst.mbs.services.rest.util.BasicUtils.parseComplexExpression(BasicUtils.java:243)

                   ......

  }

}