You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2017/02/03 07:58:03 UTC

[02/19] polygene-java git commit: Serialization 3 step 1

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rdf/src/main/java/org/apache/polygene/library/rdf/entity/EntityStateSerializer.java
----------------------------------------------------------------------
diff --git a/libraries/rdf/src/main/java/org/apache/polygene/library/rdf/entity/EntityStateSerializer.java b/libraries/rdf/src/main/java/org/apache/polygene/library/rdf/entity/EntityStateSerializer.java
index 7477179..0bd823b 100644
--- a/libraries/rdf/src/main/java/org/apache/polygene/library/rdf/entity/EntityStateSerializer.java
+++ b/libraries/rdf/src/main/java/org/apache/polygene/library/rdf/entity/EntityStateSerializer.java
@@ -27,17 +27,15 @@ import org.apache.polygene.api.entity.EntityDescriptor;
 import org.apache.polygene.api.entity.EntityReference;
 import org.apache.polygene.api.injection.scope.Service;
 import org.apache.polygene.api.property.PropertyDescriptor;
-import org.apache.polygene.api.service.qualifier.Tagged;
+import org.apache.polygene.api.serialization.Serializer;
 import org.apache.polygene.api.type.ValueCompositeType;
 import org.apache.polygene.api.type.ValueType;
 import org.apache.polygene.api.util.Classes;
 import org.apache.polygene.api.value.ValueComposite;
-import org.apache.polygene.api.value.ValueSerialization;
-import org.apache.polygene.api.value.ValueSerializer;
-import org.apache.polygene.api.value.ValueSerializer.Options;
 import org.apache.polygene.library.rdf.Rdfs;
 import org.apache.polygene.spi.entity.EntityState;
 import org.apache.polygene.spi.entity.ManyAssociationState;
+import org.apache.polygene.spi.serialization.JsonSerializer;
 import org.openrdf.model.BNode;
 import org.openrdf.model.Graph;
 import org.openrdf.model.Literal;
@@ -52,10 +50,8 @@ import org.openrdf.model.impl.GraphImpl;
  */
 public class EntityStateSerializer
 {
-
     @Service
-    @Tagged( ValueSerialization.Formats.JSON )
-    private ValueSerializer valueSerializer;
+    private JsonSerializer serializer;
 
     public URI createEntityURI( ValueFactory valueFactory, EntityReference reference )
     {
@@ -87,7 +83,8 @@ public class EntityStateSerializer
 
         graph.add( entityUri,
                    Rdfs.TYPE,
-                   values.createURI( Classes.toURI( entityState.entityDescriptor().types().findFirst().orElse( null ) ) ) );
+                   values.createURI(
+                       Classes.toURI( entityState.entityDescriptor().types().findFirst().orElse( null ) ) ) );
 
         serializeProperties( entityState,
                              graph,
@@ -108,29 +105,26 @@ public class EntityStateSerializer
                                    includeNonQueryable );
     }
 
-    private void serializeProperties( final EntityState entityState,
-                                      final Graph graph,
-                                      final Resource subject,
-                                      final EntityDescriptor entityType,
-                                      final boolean includeNonQueryable
-    )
+    private void serializeProperties( EntityState entityState,
+                                      Graph graph, Resource subject,
+                                      EntityDescriptor entityType,
+                                      boolean includeNonQueryable )
     {
         // Properties
-        entityType.state().properties().forEach( persistentProperty -> {
-            Object property = entityState.propertyValueOf( persistentProperty.qualifiedName() );
-            if( property != null )
+        entityType.state().properties().forEach(
+            persistentProperty ->
             {
-                serializeProperty( persistentProperty, property, subject, graph, includeNonQueryable );
-            }
-        } );
+                Object property = entityState.propertyValueOf( persistentProperty.qualifiedName() );
+                if( property != null )
+                {
+                    serializeProperty( persistentProperty, property, subject, graph, includeNonQueryable );
+                }
+            } );
     }
 
-    private void serializeProperty( PropertyDescriptor persistentProperty,
-                                    Object property,
-                                    Resource subject,
-                                    Graph graph,
-                                    boolean includeNonQueryable
-    )
+    private void serializeProperty( PropertyDescriptor persistentProperty, Object property,
+                                    Resource subject, Graph graph,
+                                    boolean includeNonQueryable )
     {
         if( !( includeNonQueryable || persistentProperty.queryable() ) )
         {
@@ -152,7 +146,7 @@ public class EntityStateSerializer
         }
         else
         {
-            String stringProperty = valueSerializer.serialize( new Options().withoutTypeInfo(), property );
+            String stringProperty = serializer.serialize( Serializer.Options.NO_TYPE_INFO, property );
             final Literal object = valueFactory.createLiteral( stringProperty );
             graph.add( subject, predicate, object );
         }
@@ -170,29 +164,44 @@ public class EntityStateSerializer
         BNode collection = valueFactory.createBNode();
         graph.add( subject, predicate, collection );
 
-        ( (ValueCompositeType) valueType ).properties().forEach( persistentProperty -> {
-            Object propertyValue = PolygeneAPI.FUNCTION_COMPOSITE_INSTANCE_OF
-                .apply( value )
-                .state()
-                .propertyFor( persistentProperty.accessor() )
-                .get();
-
-            if( propertyValue != null )
+        ( (ValueCompositeType) valueType ).properties().forEach(
+            persistentProperty ->
             {
-                ValueType type = persistentProperty.valueType();
-                if( type instanceof ValueCompositeType )
-                {
-                    URI pred = valueFactory.createURI( baseUri, persistentProperty.qualifiedName().name() );
-                    serializeValueComposite( collection, pred, (ValueComposite) propertyValue, type, graph,
-                                             baseUri + persistentProperty.qualifiedName().name() + "/",
-                                             includeNonQueryable );
-                }
-                else
+                Object propertyValue
+                    = PolygeneAPI.FUNCTION_COMPOSITE_INSTANCE_OF
+                    .apply( value )
+                    .state()
+                    .propertyFor( persistentProperty.accessor() )
+                    .get();
+
+                if( propertyValue != null )
                 {
-                    serializeProperty( persistentProperty, propertyValue, collection, graph, includeNonQueryable );
+                    ValueType type = persistentProperty
+                        .valueType();
+                    if( type instanceof ValueCompositeType )
+                    {
+                        URI pred = valueFactory.createURI( baseUri,
+                                                           persistentProperty
+                                                               .qualifiedName()
+                                                               .name() );
+                        serializeValueComposite( collection, pred,
+                                                 (ValueComposite) propertyValue,
+                                                 type, graph,
+                                                 baseUri
+                                                 + persistentProperty
+                                                     .qualifiedName()
+                                                     .name() + "/",
+                                                 includeNonQueryable );
+                    }
+                    else
+                    {
+                        serializeProperty( persistentProperty,
+                                           propertyValue,
+                                           collection, graph,
+                                           includeNonQueryable );
+                    }
                 }
-            }
-        } );
+            } );
     }
 
     private void serializeAssociations( final EntityState entityState,
@@ -204,15 +213,30 @@ public class EntityStateSerializer
         ValueFactory values = graph.getValueFactory();
 
         // Associations
-        associations.filter( type -> includeNonQueryable || type.queryable() ).forEach( associationType -> {
-            EntityReference associatedId = entityState.associationValueOf( associationType.qualifiedName() );
-            if( associatedId != null )
+        associations.filter( type -> includeNonQueryable || type.queryable() ).forEach(
+            associationType ->
             {
-                URI assocURI = values.createURI( associationType.qualifiedName().toURI() );
-                URI assocEntityURI = values.createURI( associatedId.toURI() );
-                graph.add( entityUri, assocURI, assocEntityURI );
-            }
-        } );
+                EntityReference associatedId
+                    = entityState
+                    .associationValueOf(
+                        associationType
+                            .qualifiedName() );
+                if( associatedId != null )
+                {
+                    URI assocURI = values
+                        .createURI(
+                            associationType
+                                .qualifiedName()
+                                .toURI() );
+                    URI assocEntityURI
+                        = values.createURI(
+                        associatedId
+                            .toURI() );
+                    graph.add( entityUri,
+                               assocURI,
+                               assocEntityURI );
+                }
+            } );
     }
 
     private void serializeManyAssociations( final EntityState entityState,
@@ -225,17 +249,37 @@ public class EntityStateSerializer
         ValueFactory values = graph.getValueFactory();
 
         // Many-Associations
-        associations.filter( type -> includeNonQueryable || type.queryable() ).forEach( associationType -> {
-            BNode collection = values.createBNode();
-            graph.add( entityUri, values.createURI( associationType.qualifiedName().toURI() ), collection );
-            graph.add( collection, Rdfs.TYPE, Rdfs.SEQ );
-
-            ManyAssociationState associatedIds = entityState.manyAssociationValueOf( associationType.qualifiedName() );
-            for( EntityReference associatedId : associatedIds )
+        associations.filter( type -> includeNonQueryable || type.queryable() ).forEach(
+            associationType ->
             {
-                URI assocEntityURI = values.createURI( associatedId.toURI() );
-                graph.add( collection, Rdfs.LIST_ITEM, assocEntityURI );
-            }
-        } );
+                BNode collection = values
+                    .createBNode();
+                graph.add( entityUri, values
+                               .createURI(
+                                   associationType
+                                       .qualifiedName()
+                                       .toURI() ),
+                           collection );
+                graph.add( collection,
+                           Rdfs.TYPE,
+                           Rdfs.SEQ );
+
+                ManyAssociationState
+                    associatedIds
+                    = entityState
+                    .manyAssociationValueOf(
+                        associationType
+                            .qualifiedName() );
+                for( EntityReference associatedId : associatedIds )
+                {
+                    URI assocEntityURI
+                        = values.createURI(
+                        associatedId
+                            .toURI() );
+                    graph.add( collection,
+                               Rdfs.LIST_ITEM,
+                               assocEntityURI );
+                }
+            } );
     }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rdf/src/test/java/org/apache/polygene/library/rdf/entity/EntitySerializerTest.java
----------------------------------------------------------------------
diff --git a/libraries/rdf/src/test/java/org/apache/polygene/library/rdf/entity/EntitySerializerTest.java b/libraries/rdf/src/test/java/org/apache/polygene/library/rdf/entity/EntitySerializerTest.java
index 0ef8475..fb5b0c3 100644
--- a/libraries/rdf/src/test/java/org/apache/polygene/library/rdf/entity/EntitySerializerTest.java
+++ b/libraries/rdf/src/test/java/org/apache/polygene/library/rdf/entity/EntitySerializerTest.java
@@ -22,17 +22,12 @@ package org.apache.polygene.library.rdf.entity;
 
 import java.io.PrintWriter;
 import java.time.Instant;
-import org.apache.polygene.api.identity.StringIdentity;
-import org.apache.polygene.api.time.SystemTime;
-import org.apache.polygene.test.AbstractPolygeneTest;
-import org.junit.Before;
-import org.junit.Test;
-import org.openrdf.model.Statement;
-import org.openrdf.rio.RDFHandlerException;
 import org.apache.polygene.api.entity.EntityBuilder;
 import org.apache.polygene.api.entity.EntityReference;
+import org.apache.polygene.api.identity.StringIdentity;
 import org.apache.polygene.api.injection.scope.Service;
 import org.apache.polygene.api.injection.scope.Uses;
+import org.apache.polygene.api.time.SystemTime;
 import org.apache.polygene.api.unitofwork.UnitOfWork;
 import org.apache.polygene.api.unitofwork.UnitOfWorkCompletionException;
 import org.apache.polygene.api.usecase.Usecase;
@@ -46,8 +41,12 @@ import org.apache.polygene.library.rdf.serializer.RdfXmlSerializer;
 import org.apache.polygene.spi.entity.EntityState;
 import org.apache.polygene.spi.entitystore.EntityStore;
 import org.apache.polygene.spi.entitystore.EntityStoreUnitOfWork;
+import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.EntityTestAssembler;
-import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+import org.junit.Before;
+import org.junit.Test;
+import org.openrdf.model.Statement;
+import org.openrdf.rio.RDFHandlerException;
 
 /**
  * JAVADOC
@@ -64,7 +63,6 @@ public class EntitySerializerTest
         throws AssemblyException
     {
         new EntityTestAssembler().assemble( module );
-        new OrgJsonValueSerializationAssembler().assemble( module );
 
         module.entities( TestEntity.class );
         module.values( TestValue.class, Test2Value.class );

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-client/build.gradle
----------------------------------------------------------------------
diff --git a/libraries/rest-client/build.gradle b/libraries/rest-client/build.gradle
index 33cb81f..68de79a 100644
--- a/libraries/rest-client/build.gradle
+++ b/libraries/rest-client/build.gradle
@@ -31,7 +31,6 @@ dependencies {
 
   testCompile polygene.core.testsupport
   testCompile polygene.library( 'rest-server' )
-  testCompile polygene.extension( 'valueserialization-orgjson' )
 
   testRuntime libraries.logback
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/requestwriter/ValueCompositeRequestWriter.java
----------------------------------------------------------------------
diff --git a/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/requestwriter/ValueCompositeRequestWriter.java b/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/requestwriter/ValueCompositeRequestWriter.java
index 90ad77a..8a77d40 100644
--- a/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/requestwriter/ValueCompositeRequestWriter.java
+++ b/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/requestwriter/ValueCompositeRequestWriter.java
@@ -26,11 +26,11 @@ import org.apache.polygene.api.injection.scope.Service;
 import org.apache.polygene.api.injection.scope.Structure;
 import org.apache.polygene.api.property.StateHolder;
 import org.apache.polygene.api.service.qualifier.Tagged;
+import org.apache.polygene.api.serialization.Serialization;
+import org.apache.polygene.api.serialization.SerializationException;
+import org.apache.polygene.api.serialization.Serializer;
 import org.apache.polygene.api.value.ValueComposite;
 import org.apache.polygene.api.value.ValueDescriptor;
-import org.apache.polygene.api.value.ValueSerialization;
-import org.apache.polygene.api.value.ValueSerializationException;
-import org.apache.polygene.api.value.ValueSerializer;
 import org.apache.polygene.library.rest.client.spi.RequestWriter;
 import org.apache.polygene.spi.PolygeneSPI;
 import org.restlet.Request;
@@ -38,7 +38,6 @@ import org.restlet.data.CharacterSet;
 import org.restlet.data.MediaType;
 import org.restlet.data.Method;
 import org.restlet.data.Reference;
-import org.restlet.engine.io.WriterOutputStream;
 import org.restlet.representation.WriterRepresentation;
 import org.restlet.resource.ResourceException;
 
@@ -52,8 +51,8 @@ public class ValueCompositeRequestWriter
    private PolygeneSPI spi;
 
    @Service
-   @Tagged( ValueSerialization.Formats.JSON )
-   private ValueSerializer valueSerializer;
+   @Tagged( Serialization.Formats.JSON )
+   private Serializer serializer;
 
     @Override
    public boolean writeRequest(Object requestObject, Request request) throws ResourceException
@@ -80,11 +79,11 @@ public class ValueCompositeRequestWriter
                      }
                      else
                      {
-                         param = valueSerializer.serialize( value );
+                         param = serializer.serialize( value );
                      }
                      ref.addQueryParameter( propertyDescriptor.qualifiedName().name(), param );
                  }
-                 catch( ValueSerializationException e )
+                 catch( SerializationException e )
                  {
                      throw new ResourceException( e );
                  }
@@ -99,7 +98,7 @@ public class ValueCompositeRequestWriter
                     throws IOException
                 {
                    setCharacterSet( CharacterSet.UTF_8 );
-                   valueSerializer.serialize( valueObject, new WriterOutputStream( writer, CharacterSet.UTF_8 ) );
+                   serializer.serialize( writer, valueObject );
                 }
             });
          }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/DefaultResponseReader.java
----------------------------------------------------------------------
diff --git a/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/DefaultResponseReader.java b/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/DefaultResponseReader.java
index 6d3111b..ff8060b 100644
--- a/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/DefaultResponseReader.java
+++ b/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/DefaultResponseReader.java
@@ -20,10 +20,11 @@
 
 package org.apache.polygene.library.rest.client.responsereader;
 
-import java.io.IOException;
-import org.json.JSONException;
-import org.json.JSONTokener;
+import org.apache.polygene.api.injection.scope.Service;
+import org.apache.polygene.api.injection.scope.Structure;
+import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.library.rest.client.spi.ResponseReader;
+import org.apache.polygene.spi.serialization.JsonDeserializer;
 import org.restlet.Response;
 import org.restlet.data.MediaType;
 import org.restlet.resource.ResourceException;
@@ -32,34 +33,31 @@ import org.restlet.resource.ResourceException;
  * ResponseReader for simple types from JSON
  */
 public class DefaultResponseReader
-   implements ResponseReader
+    implements ResponseReader
 {
+    @Structure
+    private ModuleDescriptor module;
+
+    @Service
+    private JsonDeserializer jsonDeserializer;
+
     @Override
-   public Object readResponse(Response response, Class<?> resultType) throws ResourceException
-   {
-      if (MediaType.APPLICATION_JSON.equals(response.getEntity().getMediaType()))
-         if (resultType.equals(String.class))
-         {
-            try
+    public Object readResponse( Response response, Class<?> resultType ) throws ResourceException
+    {
+        if( MediaType.APPLICATION_JSON.equals( response.getEntity().getMediaType() ) )
+        {
+            if( resultType.equals( String.class ) || Number.class.isAssignableFrom( resultType ) )
             {
-               return response.getEntity().getText();
-            } catch (IOException e)
-            {
-               throw new ResourceException(e);
+                try
+                {
+                    return jsonDeserializer.deserialize( module, resultType, response.getEntityAsText() );
+                }
+                catch( Exception e )
+                {
+                    throw new ResourceException( e );
+                }
             }
-         } else if (Number.class.isAssignableFrom(resultType))
-         {
-            try
-            {
-               Number value = (Number) new JSONTokener(response.getEntityAsText()).nextValue();
-               if (resultType.equals(Integer.class))
-                  return Integer.valueOf(value.intValue());
-            } catch (JSONException e)
-            {
-               throw new ResourceException(e);
-            }
-         }
-
-      return null;
-   }
+        }
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/JSONResponseReader.java
----------------------------------------------------------------------
diff --git a/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/JSONResponseReader.java b/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/JSONResponseReader.java
index 7b8d6a0..335c26b 100644
--- a/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/JSONResponseReader.java
+++ b/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/JSONResponseReader.java
@@ -20,18 +20,19 @@
 
 package org.apache.polygene.library.rest.client.responsereader;
 
-import java.util.Iterator;
+import java.io.IOException;
+import javax.json.Json;
+import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.json.JsonString;
+import javax.json.JsonValue;
 import org.apache.polygene.api.injection.scope.Service;
 import org.apache.polygene.api.injection.scope.Structure;
-import org.apache.polygene.api.service.qualifier.Tagged;
 import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.api.type.ValueCompositeType;
 import org.apache.polygene.api.value.ValueComposite;
-import org.apache.polygene.api.value.ValueDeserializer;
-import org.apache.polygene.api.value.ValueSerialization;
 import org.apache.polygene.library.rest.client.spi.ResponseReader;
-import org.json.JSONException;
-import org.json.JSONObject;
+import org.apache.polygene.spi.serialization.JsonDeserializer;
 import org.restlet.Response;
 import org.restlet.data.Form;
 import org.restlet.data.MediaType;
@@ -41,47 +42,50 @@ import org.restlet.resource.ResourceException;
  * JAVADOC
  */
 public class JSONResponseReader
-   implements ResponseReader
+    implements ResponseReader
 {
-   @Structure
-   private ModuleDescriptor module;
+    @Structure
+    private ModuleDescriptor module;
 
-   @Service
-   @Tagged( ValueSerialization.Formats.JSON )
-   private ValueDeserializer valueDeserializer;
+    @Service
+    private JsonDeserializer jsonDeserializer;
 
     @Override
-   public Object readResponse( Response response, Class<?> resultType )
-   {
-      if (response.getEntity().getMediaType().equals( MediaType.APPLICATION_JSON))
-      {
-         if (ValueComposite.class.isAssignableFrom( resultType ))
-         {
-            String jsonValue = response.getEntityAsText();
-            ValueCompositeType valueType = module.valueDescriptor( resultType.getName() ).valueType();
-            return valueDeserializer.deserialize( module, valueType, jsonValue );
-         }
-         else if (resultType.equals(Form.class))
-         {
-            try
+    public Object readResponse( Response response, Class<?> resultType )
+    {
+        if( response.getEntity().getMediaType().equals( MediaType.APPLICATION_JSON ) )
+        {
+            if( ValueComposite.class.isAssignableFrom( resultType ) )
             {
-               String jsonValue = response.getEntityAsText();
-               JSONObject jsonObject = new JSONObject(jsonValue);
-               Iterator<?> keys = jsonObject.keys();
-               Form form = new Form();
-               while (keys.hasNext())
-               {
-                  Object key = keys.next();
-                  form.set(key.toString(), jsonObject.get(key.toString()).toString());
-               }
-               return form;
-            } catch (JSONException e)
-            {
-               throw new ResourceException(e);
+                String jsonValue = response.getEntityAsText();
+                ValueCompositeType valueType = module.valueDescriptor( resultType.getName() ).valueType();
+                return jsonDeserializer.deserialize( module, valueType, jsonValue );
             }
-         }
-      }
+            else if( resultType.equals( Form.class ) )
+            {
+                try
+                {
+                    JsonObject jsonObject = Json.createReader( response.getEntity().getReader() ).readObject();
+                    Form form = new Form();
+                    jsonObject.entrySet().forEach(
+                        entry ->
+                        {
 
-      return null;
-   }
+                            String key = entry.getKey();
+                            JsonValue value = entry.getValue();
+                            String valueString = value.getValueType() == JsonValue.ValueType.STRING
+                                                 ? ( (JsonString) value ).getString()
+                                                 : value.toString();
+                            form.set( key, valueString );
+                        } );
+                    return form;
+                }
+                catch( IOException | JsonException e )
+                {
+                    throw new ResourceException( e );
+                }
+            }
+        }
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/TableResponseReader.java
----------------------------------------------------------------------
diff --git a/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/TableResponseReader.java b/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/TableResponseReader.java
index 4c8ac66..55019a3 100644
--- a/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/TableResponseReader.java
+++ b/libraries/rest-client/src/main/java/org/apache/polygene/library/rest/client/responsereader/TableResponseReader.java
@@ -22,15 +22,19 @@ package org.apache.polygene.library.rest.client.responsereader;
 
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
-import java.time.format.DateTimeParseException;
+import java.util.List;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+import org.apache.polygene.api.injection.scope.Service;
 import org.apache.polygene.api.injection.scope.Structure;
 import org.apache.polygene.api.structure.Module;
 import org.apache.polygene.library.rest.client.spi.ResponseReader;
 import org.apache.polygene.library.rest.common.table.Table;
 import org.apache.polygene.library.rest.common.table.TableBuilder;
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
+import org.apache.polygene.spi.serialization.JsonDeserializer;
 import org.restlet.Response;
 import org.restlet.data.MediaType;
 import org.restlet.data.Status;
@@ -40,74 +44,75 @@ import org.restlet.resource.ResourceException;
  * JAVADOC
  */
 public class TableResponseReader
-   implements ResponseReader
+    implements ResponseReader
 {
-   @Structure
-   Module module;
+    @Structure
+    private Module module;
 
-    @Override
-   public Object readResponse( Response response, Class<?> resultType ) throws ResourceException
-   {
-      if (response.getEntity().getMediaType().equals( MediaType.APPLICATION_JSON) && Table.class.isAssignableFrom( resultType ))
-      {
-         String jsonValue = response.getEntityAsText();
-         try
-         {
-            JSONObject jsonObject = new JSONObject(jsonValue);
-
-            JSONObject table = jsonObject.getJSONObject( "table" );
-            TableBuilder builder = new TableBuilder(module);
+    @Service
+    private JsonDeserializer jsonDeserializer;
 
-            JSONArray cols = table.getJSONArray( "cols" );
-            for (int i = 0; i < cols.length(); i++)
+    @Override
+    public Object readResponse( Response response, Class<?> resultType ) throws ResourceException
+    {
+        if( response.getEntity().getMediaType().equals( MediaType.APPLICATION_JSON )
+            && Table.class.isAssignableFrom( resultType ) )
+        {
+            try
             {
-               JSONObject col = cols.getJSONObject( i );
-               builder.column( col.optString( "id" ),  col.getString( "label" ), col.getString( "type" ));
-            }
+                JsonObject jsonObject = Json.createReader( response.getEntity().getReader() ).readObject();
+                JsonObject table = jsonObject.getJsonObject( "table" );
 
-            JSONArray rows = table.getJSONArray( "rows" );
-            for (int i = 0; i < rows.length(); i++)
-            {
-               builder.row();
-               JSONObject row = rows.getJSONObject( i );
-               JSONArray cells = row.getJSONArray( "c" );
-               for (int j = 0; j < cells.length(); j++)
-               {
-                  JSONObject cell = cells.getJSONObject( j );
-                  Object value = cell.opt( "v" );
-                  String formatted = cell.optString("f");
+                TableBuilder builder = new TableBuilder( module );
 
-                  if (cols.getJSONObject( j ).getString( "type" ).equals("datetime") && value != null)
-                     value = ZonedDateTime.parse( value.toString() );
-                  else if (cols.getJSONObject( j ).getString( "type" ).equals("date") && value != null)
-                     try
-                     {
-                        value = DateTimeFormatter.ofPattern( "yyyy-MM-dd").parse( value.toString() );
-                     } catch (DateTimeParseException e)
-                     {
-                        throw new ResourceException(e);
-                     }
-                  else if (cols.getJSONObject( j ).getString( "type" ).equals("timeofday") && value != null)
-                     try
-                     {
-                        value = DateTimeFormatter.ofPattern(  "HH:mm:ss").parse( value.toString() );
-                     } catch (DateTimeParseException e)
-                     {
-                        throw new ResourceException(e);
-                     }
+                JsonArray cols = table.getJsonArray( "cols" );
+                cols.getValuesAs( JsonObject.class ).forEach(
+                    col -> builder.column( col.getString( "id", null ),
+                                           col.getString( "label" ),
+                                           col.getString( "type" ) ) );
 
-                  builder.cell( value, formatted );
-               }
-               builder.endRow();
+                table.getJsonArray( "rows" ).getValuesAs( JsonObject.class ).forEach(
+                    row ->
+                    {
+                        builder.row();
+                        List<JsonObject> cells = row.getJsonArray( "c" ).getValuesAs( JsonObject.class );
+                        for( int idx = 0; idx < cells.size(); idx++ )
+                        {
+                            JsonObject cell = cells.get( idx );
+                            JsonValue jsonValue = cell.get( "v" );
+                            String formatted = cell.getString( "f", null );
+                            String type = cols.getJsonObject( idx ).getString( "type" );
+                            Object value;
+                            switch( type )
+                            {
+                                case "datetime":
+                                    value = ZonedDateTime.parse( ( (JsonString) jsonValue ).getString() );
+                                    break;
+                                case "date":
+                                    value = DateTimeFormatter.ofPattern( "yyyy-MM-dd" )
+                                                             .parse( ( (JsonString) jsonValue ).getString() );
+                                    break;
+                                case "timeofday":
+                                    value = DateTimeFormatter.ofPattern( "HH:mm:ss" )
+                                                             .parse( ( (JsonString) jsonValue ).getString() );
+                                    break;
+                                default:
+                                    value = jsonValue.getValueType() == JsonValue.ValueType.STRING
+                                            ? ( (JsonString) jsonValue ).getString()
+                                            : jsonValue.toString();
+                            }
+                            builder.cell( value, formatted );
+                        }
+                        builder.endRow();
+                    }
+                );
+                return builder.newTable();
             }
-
-            return builder.newTable();
-         } catch (JSONException e)
-         {
-            throw new ResourceException( Status.CLIENT_ERROR_UNPROCESSABLE_ENTITY, e);
-         }
-      }
-
-      return null;
-   }
+            catch( Exception e )
+            {
+                throw new ResourceException( Status.CLIENT_ERROR_UNPROCESSABLE_ENTITY, e );
+            }
+        }
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/ContextResourceClientFactoryTest.java
----------------------------------------------------------------------
diff --git a/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/ContextResourceClientFactoryTest.java b/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/ContextResourceClientFactoryTest.java
index 771cbd6..e979d43 100644
--- a/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/ContextResourceClientFactoryTest.java
+++ b/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/ContextResourceClientFactoryTest.java
@@ -26,14 +26,12 @@ import org.apache.polygene.api.common.Optional;
 import org.apache.polygene.api.common.UseDefaults;
 import org.apache.polygene.api.composite.TransientComposite;
 import org.apache.polygene.api.constraint.Name;
-import org.apache.polygene.api.entity.EntityComposite;
 import org.apache.polygene.api.injection.scope.Structure;
 import org.apache.polygene.api.injection.scope.Uses;
 import org.apache.polygene.api.property.Property;
 import org.apache.polygene.api.structure.Application;
 import org.apache.polygene.api.structure.ApplicationDescriptor;
 import org.apache.polygene.api.structure.Module;
-import org.apache.polygene.api.type.HasTypes;
 import org.apache.polygene.api.unitofwork.ConcurrentEntityModificationException;
 import org.apache.polygene.api.unitofwork.UnitOfWorkCallback;
 import org.apache.polygene.api.unitofwork.UnitOfWorkCompletionException;
@@ -72,7 +70,6 @@ import org.apache.polygene.library.rest.server.restlet.NullCommandResult;
 import org.apache.polygene.library.rest.server.spi.CommandResult;
 import org.apache.polygene.test.AbstractPolygeneTest;
 import org.apache.polygene.test.util.FreePortFinder;
-import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
 import org.hamcrest.CoreMatchers;
 import org.junit.After;
 import org.junit.Assert;
@@ -112,7 +109,6 @@ public class ContextResourceClientFactoryTest
         throws AssemblyException
     {
         // General setup of client and server
-        new OrgJsonValueSerializationAssembler().assemble( module );
         new ClientAssembler().assemble( module );
         new ValueAssembler().assemble( module );
         new RestServerAssembler().assemble( module );
@@ -568,12 +564,12 @@ public class ContextResourceClientFactoryTest
 
         public TestResult queryWithValue( TestQuery query )
         {
-            return vbf.newValueFromSerializedState( TestResult.class, "{'xyz':'"+query.abc().get()+"'}" );
+            return vbf.newValueFromSerializedState( TestResult.class, "{\"xyz\":\""+query.abc().get()+"\"}" );
         }
 
         public TestResult queryWithoutValue()
         {
-            return vbf.newValueFromSerializedState( TestResult.class, "{'xyz':'bar'}" );
+            return vbf.newValueFromSerializedState( TestResult.class, "{\"xyz\":\"bar\"}" );
         }
 
         public String queryWithStringResult( TestQuery query )
@@ -609,7 +605,7 @@ public class ContextResourceClientFactoryTest
                     public void beforeCompletion()
                         throws UnitOfWorkCompletionException
                     {
-                        throw new ConcurrentEntityModificationException( Collections.<EntityComposite, HasTypes>emptyMap(),
+                        throw new ConcurrentEntityModificationException( Collections.emptyMap(),
                                                                          UsecaseBuilder.newUsecase( "Testing" ) );
                     }
 
@@ -642,7 +638,7 @@ public class ContextResourceClientFactoryTest
 
         public TestResult queryWithValue( TestQuery query )
         {
-            return module.newValueFromSerializedState( TestResult.class, "{'xyz':'bar'}" );
+            return module.newValueFromSerializedState( TestResult.class, "{\"xyz\":\"bar\"}" );
         }
 
         // Test interaction constraints
@@ -650,7 +646,7 @@ public class ContextResourceClientFactoryTest
         @Requires( File.class )
         public TestResult queryWithRoleRequirement( TestQuery query )
         {
-            return module.newValueFromSerializedState( TestResult.class, "{'xyz':'bar'}" );
+            return module.newValueFromSerializedState( TestResult.class, "{\"xyz\":\"bar\"}" );
         }
 
         @Requires( File.class )
@@ -697,7 +693,7 @@ public class ContextResourceClientFactoryTest
 
         public TestResult genericQuery( TestQuery query )
         {
-            return module.newValueFromSerializedState( TestResult.class, "{'xyz':'bar'}" );
+            return module.newValueFromSerializedState( TestResult.class, "{\"xyz\":\"bar\"}" );
         }
     }
 

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/ContinuousIntegrationTest.java
----------------------------------------------------------------------
diff --git a/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/ContinuousIntegrationTest.java b/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/ContinuousIntegrationTest.java
index 69d460e..9d66d36 100644
--- a/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/ContinuousIntegrationTest.java
+++ b/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/ContinuousIntegrationTest.java
@@ -19,13 +19,6 @@
  */
 package org.apache.polygene.library.rest.client;
 
-import org.apache.polygene.test.AbstractPolygeneTest;
-import org.apache.polygene.test.util.FreePortFinder;
-import org.hamcrest.CoreMatchers;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
 import org.apache.polygene.api.common.Optional;
 import org.apache.polygene.api.injection.scope.Structure;
 import org.apache.polygene.api.property.Property;
@@ -53,7 +46,13 @@ import org.apache.polygene.library.rest.server.api.ContextRestlet;
 import org.apache.polygene.library.rest.server.assembler.RestServerAssembler;
 import org.apache.polygene.library.rest.server.restlet.NullCommandResult;
 import org.apache.polygene.library.rest.server.spi.CommandResult;
-import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+import org.apache.polygene.test.AbstractPolygeneTest;
+import org.apache.polygene.test.util.FreePortFinder;
+import org.hamcrest.CoreMatchers;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 import org.restlet.Client;
 import org.restlet.Request;
 import org.restlet.Response;
@@ -89,7 +88,6 @@ public class ContinuousIntegrationTest
         throws AssemblyException
     {
         // General setup of client and server
-        new OrgJsonValueSerializationAssembler().assemble( module );
         new ClientAssembler().assemble( module );
         new ValueAssembler().assemble( module );
         new RestServerAssembler().assemble( module );
@@ -434,12 +432,12 @@ public class ContinuousIntegrationTest
         public BuildResult buildStatus( BuildSpec build )
         {
             String buildNo = build.buildNo().get(); // or lookup by tag
-            return module.newValueFromSerializedState( BuildResult.class, "{ 'buildNo':'" + buildNo + "', 'testsPassed': 37, 'testsFailed': 1}" );
+            return module.newValueFromSerializedState( BuildResult.class, "{ \"buildNo\":\"" + buildNo + "\", \"testsPassed\": 37, \"testsFailed\": 1}" );
         }
 
         public ServerStatus serverStatus()
         {
-            return module.newValueFromSerializedState( ServerStatus.class, "{'currentStatus':'Idle', 'availableAgents': 2  }" );
+            return module.newValueFromSerializedState( ServerStatus.class, "{\"currentStatus\":\"Idle\", \"availableAgents\": 2  }" );
         }
 
         public void tagBuild( TagBuildCommand command )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/RssReaderTest.java
----------------------------------------------------------------------
diff --git a/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/RssReaderTest.java b/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/RssReaderTest.java
index a5344d8..bb241df 100644
--- a/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/RssReaderTest.java
+++ b/libraries/rest-client/src/test/java/org/apache/polygene/library/rest/client/RssReaderTest.java
@@ -27,8 +27,6 @@ import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
-import org.junit.BeforeClass;
-import org.junit.Test;
 import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import org.apache.polygene.library.rest.client.api.ContextResourceClient;
@@ -40,7 +38,8 @@ import org.apache.polygene.library.rest.client.spi.ResponseReader;
 import org.apache.polygene.library.rest.client.spi.ResultHandler;
 import org.apache.polygene.library.rest.common.ValueAssembler;
 import org.apache.polygene.test.AbstractPolygeneTest;
-import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
+import org.junit.BeforeClass;
+import org.junit.Test;
 import org.restlet.Client;
 import org.restlet.Response;
 import org.restlet.data.Protocol;
@@ -75,7 +74,6 @@ public class RssReaderTest
         throws AssemblyException
     {
         // General setup of client
-        new OrgJsonValueSerializationAssembler().assemble( module );
         new ClientAssembler().assemble( module );
         new ValueAssembler().assemble( module );
     }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-common/src/main/java/org/apache/polygene/library/rest/common/Resource.java
----------------------------------------------------------------------
diff --git a/libraries/rest-common/src/main/java/org/apache/polygene/library/rest/common/Resource.java b/libraries/rest-common/src/main/java/org/apache/polygene/library/rest/common/Resource.java
index 454a961..d9d17d7 100644
--- a/libraries/rest-common/src/main/java/org/apache/polygene/library/rest/common/Resource.java
+++ b/libraries/rest-common/src/main/java/org/apache/polygene/library/rest/common/Resource.java
@@ -55,7 +55,7 @@ public interface Resource
     Link resource(String relation);
 
     @Optional
-    Property<ValueComposite> index();
+    Property<Object> index();
 
     abstract class Mixin
         implements Resource

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/api/ContextResource.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/api/ContextResource.java b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/api/ContextResource.java
index d66a8a8..532ed8d 100644
--- a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/api/ContextResource.java
+++ b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/api/ContextResource.java
@@ -428,7 +428,7 @@ public class ContextResource
 
                 if( index != null && index instanceof ValueComposite )
                 {
-                    builder.prototype().index().set( (ValueComposite) index );
+                    builder.prototype().index().set( index );
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/requestreader/DefaultRequestReader.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/requestreader/DefaultRequestReader.java b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/requestreader/DefaultRequestReader.java
index b4736af..48c32b0 100644
--- a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/requestreader/DefaultRequestReader.java
+++ b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/requestreader/DefaultRequestReader.java
@@ -41,14 +41,14 @@ import org.apache.polygene.api.injection.scope.Service;
 import org.apache.polygene.api.injection.scope.Structure;
 import org.apache.polygene.api.property.PropertyDescriptor;
 import org.apache.polygene.api.service.qualifier.Tagged;
+import org.apache.polygene.api.serialization.Deserializer;
+import org.apache.polygene.api.serialization.Serialization;
+import org.apache.polygene.api.serialization.SerializationException;
 import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.api.unitofwork.UnitOfWorkFactory;
 import org.apache.polygene.api.value.ValueBuilder;
 import org.apache.polygene.api.value.ValueBuilderFactory;
 import org.apache.polygene.api.value.ValueComposite;
-import org.apache.polygene.api.value.ValueDeserializer;
-import org.apache.polygene.api.value.ValueSerialization;
-import org.apache.polygene.api.value.ValueSerializationException;
 import org.apache.polygene.library.rest.server.spi.RequestReader;
 import org.restlet.Request;
 import org.restlet.Response;
@@ -86,8 +86,8 @@ public class DefaultRequestReader
     private ValueBuilderFactory vbf;
 
     @Service
-    @Tagged( ValueSerialization.Formats.JSON )
-    private ValueDeserializer valueDeserializer;
+    @Tagged( Serialization.Formats.JSON )
+    private Deserializer deserializer;
 
     @Override
     @SuppressWarnings( "unchecked" )
@@ -303,9 +303,9 @@ public class DefaultRequestReader
                     {
                         try
                         {
-                            return valueDeserializer.deserialize( module, propertyDescriptor.valueType(), value );
+                            return deserializer.deserialize( module, propertyDescriptor.valueType(), value );
                         }
-                        catch( ValueSerializationException e )
+                        catch( SerializationException e )
                         {
                             throw new IllegalArgumentException( "Query parameter has invalid JSON format", e );
                         }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/AbstractResponseWriter.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/AbstractResponseWriter.java b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/AbstractResponseWriter.java
index 7a8458e..358d81d 100644
--- a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/AbstractResponseWriter.java
+++ b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/AbstractResponseWriter.java
@@ -20,7 +20,6 @@
 
 package org.apache.polygene.library.rest.server.restlet.responsewriter;
 
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import org.apache.polygene.library.rest.server.spi.ResponseWriter;
@@ -36,7 +35,7 @@ import org.restlet.representation.Variant;
 public abstract class AbstractResponseWriter
     implements ResponseWriter
 {
-    protected static List<Language> ENGLISH = Arrays.asList( Language.ENGLISH );
+    protected static List<Language> ENGLISH = Collections.singletonList( Language.ENGLISH );
 
     protected Variant getVariant( Request request,
                                   List<Language> possibleLanguages,

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/DefaultResponseWriter.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/DefaultResponseWriter.java b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/DefaultResponseWriter.java
index 8e480bf..1091612 100644
--- a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/DefaultResponseWriter.java
+++ b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/DefaultResponseWriter.java
@@ -20,7 +20,7 @@
 
 package org.apache.polygene.library.rest.server.restlet.responsewriter;
 
-import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import org.restlet.Response;
 import org.restlet.data.MediaType;
@@ -33,7 +33,7 @@ import org.restlet.resource.ResourceException;
 public class DefaultResponseWriter
     extends AbstractResponseWriter
 {
-    private static final List<MediaType> supportedMediaTypes = Arrays.asList( MediaType.APPLICATION_JSON );
+    private static final List<MediaType> supportedMediaTypes = Collections.singletonList( MediaType.APPLICATION_JSON );
 
     @Override
     public boolean writeResponse( final Object result, final Response response )

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/FormResponseWriter.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/FormResponseWriter.java b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/FormResponseWriter.java
index 233a80b..f59d166 100644
--- a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/FormResponseWriter.java
+++ b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/FormResponseWriter.java
@@ -29,8 +29,10 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.json.JSONException;
-import org.json.JSONObject;
+import javax.json.Json;
+import javax.json.JsonException;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
 import org.apache.polygene.api.injection.scope.Service;
 import org.restlet.Response;
 import org.restlet.data.Form;
@@ -47,7 +49,8 @@ import org.restlet.resource.ResourceException;
 public class FormResponseWriter
     extends AbstractResponseWriter
 {
-    private static final List<MediaType> supportedMediaTypes = Arrays.asList( MediaType.TEXT_HTML, MediaType.APPLICATION_JSON );
+    private static final List<MediaType> supportedMediaTypes = Arrays.asList( MediaType.TEXT_HTML,
+                                                                              MediaType.APPLICATION_JSON );
 
     @Service
     private Configuration cfg;
@@ -61,7 +64,7 @@ public class FormResponseWriter
             MediaType type = getVariant( response.getRequest(), ENGLISH, supportedMediaTypes ).getMediaType();
             if( MediaType.APPLICATION_JSON.equals( type ) )
             {
-                JSONObject json = new JSONObject();
+                JsonObjectBuilder builder = Json.createObjectBuilder();
                 Form form = (Form) result;
                 try
                 {
@@ -70,21 +73,21 @@ public class FormResponseWriter
                         String value = parameter.getValue();
                         if( value == null )
                         {
-                            json.put( parameter.getName(), JSONObject.NULL );
+                            builder.add( parameter.getName(), JsonValue.NULL );
                         }
                         else
                         {
-                            json.put( parameter.getName(), value );
+                            builder.add( parameter.getName(), value );
                         }
                     }
                 }
-                catch( JSONException e )
+                catch( JsonException e )
                 {
                     e.printStackTrace();
                 }
 
-                StringRepresentation representation
-                    = new StringRepresentation( json.toString(), MediaType.APPLICATION_JSON );
+                StringRepresentation representation = new StringRepresentation( builder.build().toString(),
+                                                                                MediaType.APPLICATION_JSON );
                 response.setEntity( representation );
 
                 return true;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/JSONResponseWriter.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/JSONResponseWriter.java b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/JSONResponseWriter.java
index 86fc8d6..6b9af86 100644
--- a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/JSONResponseWriter.java
+++ b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/JSONResponseWriter.java
@@ -22,7 +22,7 @@ package org.apache.polygene.library.rest.server.restlet.responsewriter;
 
 import java.util.Arrays;
 import java.util.List;
-import org.json.JSONObject;
+import javax.json.JsonObject;
 import org.restlet.Response;
 import org.restlet.data.MediaType;
 import org.restlet.representation.StringRepresentation;
@@ -33,28 +33,28 @@ import org.restlet.resource.ResourceException;
  */
 public class JSONResponseWriter extends AbstractResponseWriter
 {
-    private static final List<MediaType> supportedMediaTypes = Arrays.asList( MediaType.TEXT_HTML, MediaType.APPLICATION_JSON );
+    private static final List<MediaType> supportedMediaTypes = Arrays.asList( MediaType.TEXT_HTML,
+                                                                              MediaType.APPLICATION_JSON );
 
     @Override
-    public boolean writeResponse( final Object result, final Response response )
-        throws ResourceException
+    public boolean writeResponse( Object result, Response response ) throws ResourceException
     {
-        if( result instanceof JSONObject )
+        if( result instanceof JsonObject )
         {
             MediaType type = getVariant( response.getRequest(), ENGLISH, supportedMediaTypes ).getMediaType();
             if( MediaType.APPLICATION_JSON.equals( type ) )
             {
-                JSONObject json = (JSONObject) result;
-                StringRepresentation representation
-                    = new StringRepresentation( json.toString(), MediaType.APPLICATION_JSON );
+                JsonObject json = (JsonObject) result;
+                StringRepresentation representation = new StringRepresentation( json.toString(),
+                                                                                MediaType.APPLICATION_JSON );
                 response.setEntity( representation );
                 return true;
             }
             else if( MediaType.TEXT_HTML.equals( type ) )
             {
-                JSONObject json = (JSONObject) result;
-                StringRepresentation representation
-                    = new StringRepresentation( json.toString(), MediaType.TEXT_HTML );
+                JsonObject json = (JsonObject) result;
+                StringRepresentation representation = new StringRepresentation( json.toString(),
+                                                                                MediaType.TEXT_HTML );
                 response.setEntity( representation );
                 return true;
             }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/LinksResponseWriter.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/LinksResponseWriter.java b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/LinksResponseWriter.java
index dea6f15..dcac1db 100644
--- a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/LinksResponseWriter.java
+++ b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/LinksResponseWriter.java
@@ -25,6 +25,7 @@ import freemarker.template.TemplateException;
 import java.io.IOException;
 import java.io.Writer;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -46,7 +47,7 @@ import org.restlet.resource.ResourceException;
 public class LinksResponseWriter
     extends AbstractResponseWriter
 {
-    private static final List<MediaType> supportedLinkMediaTypes = Arrays.asList( MediaType.APPLICATION_JSON );
+    private static final List<MediaType> supportedLinkMediaTypes = Collections.singletonList( MediaType.APPLICATION_JSON );
     private static final List<MediaType> supportedLinksMediaTypes = Arrays.asList( MediaType.TEXT_HTML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_ATOM );
 
     @Service

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/TableResponseWriter.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/TableResponseWriter.java b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/TableResponseWriter.java
index a2ec82b..bbe758c 100644
--- a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/TableResponseWriter.java
+++ b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/TableResponseWriter.java
@@ -28,13 +28,18 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonException;
+import javax.json.JsonObjectBuilder;
 import org.apache.polygene.api.injection.scope.Service;
+import org.apache.polygene.api.injection.scope.Structure;
+import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.library.rest.common.table.Cell;
 import org.apache.polygene.library.rest.common.table.Column;
 import org.apache.polygene.library.rest.common.table.Row;
 import org.apache.polygene.library.rest.common.table.Table;
-import org.json.JSONException;
-import org.json.JSONWriter;
+import org.apache.polygene.spi.serialization.JsonSerializer;
 import org.restlet.Response;
 import org.restlet.data.CharacterSet;
 import org.restlet.data.MediaType;
@@ -47,7 +52,14 @@ import org.restlet.resource.ResourceException;
  */
 public class TableResponseWriter extends AbstractResponseWriter
 {
-    private static final List<MediaType> supportedMediaTypes = Arrays.asList( MediaType.TEXT_HTML, MediaType.APPLICATION_JSON );
+    private static final List<MediaType> supportedMediaTypes = Arrays.asList( MediaType.TEXT_HTML,
+                                                                              MediaType.APPLICATION_JSON );
+
+    @Structure
+    private ModuleDescriptor module;
+
+    @Service
+    private JsonSerializer jsonSerializer;
 
     @Service
     private Configuration cfg;
@@ -61,7 +73,6 @@ public class TableResponseWriter extends AbstractResponseWriter
             MediaType type = getVariant( response.getRequest(), ENGLISH, supportedMediaTypes ).getMediaType();
             if( MediaType.APPLICATION_JSON.equals( type ) )
             {
-
                 response.setEntity( new WriterRepresentation( MediaType.APPLICATION_JSON )
                 {
                     @Override
@@ -70,11 +81,12 @@ public class TableResponseWriter extends AbstractResponseWriter
                     {
                         try
                         {
-                            JSONWriter json = new JSONWriter( writer );
+                            JsonObjectBuilder builder = Json.createObjectBuilder();
                             Table tableValue = (Table) result;
 
                             // Parse parameters
-                            String tqx = response.getRequest().getResourceRef().getQueryAsForm().getFirstValue( "tqx" );
+                            String tqx = response.getRequest().getResourceRef().getQueryAsForm()
+                                                 .getFirstValue( "tqx" );
                             String reqId = null;
                             if( tqx != null )
                             {
@@ -92,77 +104,71 @@ public class TableResponseWriter extends AbstractResponseWriter
                                 }
                             }
 
-                            json.object().key( "version" ).value( "0.6" );
+                            builder.add( "version", "0.6" );
                             if( reqId != null )
                             {
-                                json.key( "reqId" ).value( reqId );
+                                builder.add( "reqId", reqId );
                             }
-                            json.key( "status" ).value( "ok" );
-                            json.key( "table" ).object();
+                            builder.add( "status", "ok" );
+
+                            JsonObjectBuilder tableBuilder = Json.createObjectBuilder();
+                            JsonArrayBuilder colsBuilder = Json.createArrayBuilder();
                             List<Column> columnList = tableValue.cols().get();
-                            json.key( "cols" ).array();
                             for( Column columnValue : columnList )
                             {
-                                json.object().
-                                    key( "id" ).value( columnValue.id().get() ).
-                                    key( "label" ).value( columnValue.label().get() ).
-                                    key( "type" ).value( columnValue.columnType().get() ).
-                                    endObject();
+                                colsBuilder.add( Json.createObjectBuilder()
+                                                     .add( "id", columnValue.id().get() )
+                                                     .add( "label", columnValue.label().get() )
+                                                     .add( "type", columnValue.columnType().get() )
+                                                     .build() );
                             }
-                            json.endArray();
+                            tableBuilder.add( "cols", colsBuilder.build() );
 
-                            json.key( "rows" ).array();
+                            JsonArrayBuilder rowsBuilder = Json.createArrayBuilder();
                             for( Row rowValue : tableValue.rows().get() )
                             {
-                                json.object();
-                                json.key( "c" ).array();
+                                JsonArrayBuilder cellsBuilder = Json.createArrayBuilder();
                                 int idx = 0;
                                 for( Cell cellValue : rowValue.c().get() )
                                 {
-                                    json.object();
                                     Object value = cellValue.v().get();
-                                    if( columnList.get( idx )
-                                            .columnType()
-                                            .get()
-                                            .equals( Table.DATETIME ) && value != null )
+                                    if( columnList.get( idx ).columnType().get().equals( Table.DATETIME )
+                                        && value != null )
                                     {
                                         value = value.toString();
                                     }
-                                    else if( columnList.get( idx )
-                                                 .columnType()
-                                                 .get()
-                                                 .equals( Table.DATE ) && value != null )
+                                    else if( columnList.get( idx ).columnType().get().equals( Table.DATE )
+                                             && value != null )
                                     {
                                         value = value.toString();
                                     }
-                                    else if( columnList.get( idx )
-                                                 .columnType()
-                                                 .get()
-                                                 .equals( Table.TIME_OF_DAY ) && value != null )
+                                    else if( columnList.get( idx ).columnType().get().equals( Table.TIME_OF_DAY )
+                                             && value != null )
                                     {
                                         value = value.toString();
                                     }
 
+                                    JsonObjectBuilder cellBuilder = Json.createObjectBuilder();
                                     if( value != null )
                                     {
-                                        json.key( "v" ).value( value );
+                                        cellBuilder.add( "v", jsonSerializer.toJson( value ) );
                                     }
                                     if( cellValue.f().get() != null )
                                     {
-                                        json.key( "f" ).value( cellValue.f().get() );
+                                        cellBuilder.add( "f", cellValue.f().get() );
                                     }
-                                    json.endObject();
-
+                                    cellsBuilder.add( cellBuilder.build() );
                                     idx++;
                                 }
-                                json.endArray();
-                                json.endObject();
+                                JsonObjectBuilder rowBuilder = Json.createObjectBuilder();
+                                rowBuilder.add( "c", cellsBuilder.build() );
+                                rowsBuilder.add( rowBuilder.build() );
                             }
-                            json.endArray();
-                            json.endObject();
-                            json.endObject();
+                            tableBuilder.add( "rows", rowsBuilder.build() );
+                            builder.add( "table", tableBuilder.build() );
+                            writer.write( builder.build().toString() );
                         }
-                        catch( JSONException e )
+                        catch( JsonException e )
                         {
                             throw new IOException( e );
                         }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueCompositeResponseWriter.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueCompositeResponseWriter.java b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueCompositeResponseWriter.java
index 9978b29..a50e9ca 100644
--- a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueCompositeResponseWriter.java
+++ b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueCompositeResponseWriter.java
@@ -32,9 +32,9 @@ import java.util.List;
 import java.util.Map;
 import org.apache.polygene.api.injection.scope.Service;
 import org.apache.polygene.api.service.qualifier.Tagged;
+import org.apache.polygene.api.serialization.Serialization;
+import org.apache.polygene.api.serialization.Serializer;
 import org.apache.polygene.api.value.ValueComposite;
-import org.apache.polygene.api.value.ValueSerialization;
-import org.apache.polygene.api.value.ValueSerializer;
 import org.restlet.Response;
 import org.restlet.data.MediaType;
 import org.restlet.representation.Representation;
@@ -53,8 +53,8 @@ public class ValueCompositeResponseWriter extends AbstractResponseWriter
     private Configuration cfg;
 
     @Service
-    @Tagged( ValueSerialization.Formats.JSON )
-    private ValueSerializer valueSerializer;
+    @Tagged( Serialization.Formats.JSON )
+    private Serializer serializer;
 
     @Override
     public boolean writeResponse( final Object result, final Response response )
@@ -65,7 +65,7 @@ public class ValueCompositeResponseWriter extends AbstractResponseWriter
             MediaType type = getVariant( response.getRequest(), ENGLISH, supportedMediaTypes ).getMediaType();
             if( MediaType.APPLICATION_JSON.equals( type ) )
             {
-                StringRepresentation representation = new StringRepresentation( valueSerializer.serialize( result ),
+                StringRepresentation representation = new StringRepresentation( serializer.serialize( result ),
                                                                                 MediaType.APPLICATION_JSON );
                 response.setEntity( representation );
                 return true;

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueDescriptorResponseWriter.java
----------------------------------------------------------------------
diff --git a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueDescriptorResponseWriter.java b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueDescriptorResponseWriter.java
index 5bf1d1b..c5296c1 100644
--- a/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueDescriptorResponseWriter.java
+++ b/libraries/rest-server/src/main/java/org/apache/polygene/library/rest/server/restlet/responsewriter/ValueDescriptorResponseWriter.java
@@ -28,12 +28,14 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import javax.json.Json;
+import javax.json.JsonException;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
 import org.apache.polygene.api.injection.scope.Service;
 import org.apache.polygene.api.injection.scope.Structure;
 import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.api.value.ValueDescriptor;
-import org.json.JSONException;
-import org.json.JSONObject;
 import org.restlet.Response;
 import org.restlet.data.MediaType;
 import org.restlet.representation.Representation;
@@ -46,7 +48,8 @@ import org.restlet.resource.ResourceException;
  */
 public class ValueDescriptorResponseWriter extends AbstractResponseWriter
 {
-    private static final List<MediaType> supportedMediaTypes = Arrays.asList( MediaType.TEXT_HTML, MediaType.APPLICATION_JSON );
+    private static final List<MediaType> supportedMediaTypes = Arrays.asList( MediaType.TEXT_HTML,
+                                                                              MediaType.APPLICATION_JSON );
 
     @Structure
     private ModuleDescriptor module;
@@ -63,28 +66,33 @@ public class ValueDescriptorResponseWriter extends AbstractResponseWriter
             MediaType type = getVariant( response.getRequest(), ENGLISH, supportedMediaTypes ).getMediaType();
             if( MediaType.APPLICATION_JSON.equals( type ) )
             {
-                JSONObject json = new JSONObject();
                 ValueDescriptor vd = (ValueDescriptor) result;
-                vd.state().properties().forEach( propertyDescriptor -> {
-                    try
+                JsonObjectBuilder builder = Json.createObjectBuilder();
+                vd.state().properties().forEach(
+                    propertyDescriptor ->
                     {
-                        Object o = propertyDescriptor.initialValue( module );
-                        if( o == null )
+                        try
                         {
-                            json.put( propertyDescriptor.qualifiedName().name(), JSONObject.NULL );
+                            Object o = propertyDescriptor.initialValue( module );
+                            if( o == null )
+                            {
+                                builder.add( propertyDescriptor.qualifiedName().name(),
+                                             JsonValue.NULL );
+                            }
+                            else
+                            {
+                                builder.add( propertyDescriptor.qualifiedName().name(),
+                                             o.toString() );
+                            }
                         }
-                        else
+                        catch( JsonException e )
                         {
-                            json.put( propertyDescriptor.qualifiedName().name(), o.toString() );
+                            throw new RestResponseException( "Unable to serialize " + vd,
+                                                             e );
                         }
-                    }
-                    catch( JSONException e )
-                    {
-                        throw new RestResponseException( "Unable to serialize " + vd, e);
-                    }
-                } );
-                StringRepresentation representation
-                    = new StringRepresentation( json.toString(), MediaType.APPLICATION_JSON );
+                    } );
+                StringRepresentation representation = new StringRepresentation( builder.build().toString(),
+                                                                                MediaType.APPLICATION_JSON );
                 response.setEntity( representation );
                 return true;
             }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest/build.gradle
----------------------------------------------------------------------
diff --git a/libraries/rest/build.gradle b/libraries/rest/build.gradle
index 27d8532..93815a5 100644
--- a/libraries/rest/build.gradle
+++ b/libraries/rest/build.gradle
@@ -35,7 +35,6 @@ dependencies {
 
   testCompile polygene.core.testsupport
   testCompile polygene.library( 'http' )
-  testCompile polygene.extension( 'valueserialization-orgjson' )
   testCompile libraries.http_client
 
   testRuntime libraries.logback

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntitiesResource.java
----------------------------------------------------------------------
diff --git a/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntitiesResource.java b/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntitiesResource.java
index b0eb71e..0b07b3e 100644
--- a/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntitiesResource.java
+++ b/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntitiesResource.java
@@ -22,6 +22,7 @@ package org.apache.polygene.library.rest.admin;
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.Writer;
 import java.util.Arrays;
@@ -31,7 +32,7 @@ import java.util.stream.Stream;
 import org.apache.polygene.api.entity.EntityComposite;
 import org.apache.polygene.api.entity.EntityReference;
 import org.apache.polygene.api.injection.scope.Service;
-import org.apache.polygene.api.value.ValueSerialization;
+import org.apache.polygene.api.serialization.Serialization;
 import org.apache.polygene.spi.query.EntityFinder;
 import org.apache.polygene.spi.query.EntityFinderException;
 import org.restlet.data.CharacterSet;
@@ -64,7 +65,7 @@ public class EntitiesResource
     @Service
     private EntityFinder entityFinder;
     @Service
-    private ValueSerialization valueSerialization;
+    private Serialization stateSerialization;
 
     public EntitiesResource()
     {
@@ -117,7 +118,7 @@ public class EntitiesResource
                 public void write( OutputStream outputStream )
                     throws IOException
                 {
-                    valueSerialization.serialize( query, outputStream );
+                    stateSerialization.serialize( new OutputStreamWriter( outputStream ), query );
                 }
             };
         }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntityResource.java
----------------------------------------------------------------------
diff --git a/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntityResource.java b/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntityResource.java
index cbdb34d..9eb3c17 100644
--- a/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntityResource.java
+++ b/libraries/rest/src/main/java/org/apache/polygene/library/rest/admin/EntityResource.java
@@ -38,12 +38,11 @@ import org.apache.polygene.api.identity.StringIdentity;
 import org.apache.polygene.api.injection.scope.Service;
 import org.apache.polygene.api.injection.scope.Structure;
 import org.apache.polygene.api.injection.scope.Uses;
+import org.apache.polygene.api.serialization.SerializationException;
 import org.apache.polygene.api.structure.ModuleDescriptor;
 import org.apache.polygene.api.time.SystemTime;
 import org.apache.polygene.api.usecase.Usecase;
 import org.apache.polygene.api.usecase.UsecaseBuilder;
-import org.apache.polygene.api.value.ValueSerialization;
-import org.apache.polygene.api.value.ValueSerializationException;
 import org.apache.polygene.library.rdf.entity.EntityStateSerializer;
 import org.apache.polygene.library.rdf.serializer.RdfXmlSerializer;
 import org.apache.polygene.spi.entity.EntityState;
@@ -54,6 +53,7 @@ import org.apache.polygene.spi.entitystore.EntityNotFoundException;
 import org.apache.polygene.spi.entitystore.EntityStore;
 import org.apache.polygene.spi.entitystore.EntityStoreUnitOfWork;
 import org.apache.polygene.spi.entitystore.helpers.JSONEntityState;
+import org.apache.polygene.spi.serialization.JsonSerialization;
 import org.openrdf.model.Statement;
 import org.openrdf.rio.RDFHandlerException;
 import org.restlet.data.CharacterSet;
@@ -79,7 +79,7 @@ public class EntityResource
     private EntityStore entityStore;
 
     @Service
-    private ValueSerialization valueSerialization;
+    private JsonSerialization serialization;
 
     @Structure
     private ModuleDescriptor module;
@@ -231,7 +231,7 @@ public class EntityResource
                                  + "type=\"text\" "
                                  + ( persistentProperty.isImmutable() ? "readonly=\"true\" " : "" )
                                  + "name=\"" + persistentProperty.qualifiedName() + "\" "
-                                 + "value=\"" + ( value == null ? "" : valueSerialization.serialize( value ) )
+                                 + "value=\"" + ( value == null ? "" : serialization.serialize( value ) )
                                  + "\"/></td></tr>" );
                 } );
                 out.println( "</table></fieldset>\n" );
@@ -308,6 +308,7 @@ public class EntityResource
 
     private Representation representJson( EntityState entityState )
     {
+        // TODO This guy needs to represent an Entity as JSON
         if( entityState instanceof JSONEntityState )
         {
             JSONEntityState jsonState = (JSONEntityState) entityState;
@@ -377,7 +378,7 @@ public class EntityResource
                     {
                         entity.setPropertyValue(
                             persistentProperty.qualifiedName(),
-                            valueSerialization.deserialize( module, persistentProperty.valueType(), formValue ) );
+                            serialization.deserialize( module, persistentProperty.valueType(), formValue ) );
                     }
                 }
             } );
@@ -503,7 +504,7 @@ public class EntityResource
                 }
             } );
         }
-        catch( ValueSerializationException | IllegalArgumentException e )
+        catch( SerializationException | IllegalArgumentException e )
         {
             throw new ResourceException( Status.SERVER_ERROR_INTERNAL, e );
         }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/rest/src/test/java/org/apache/polygene/library/rest/admin/RDFAssembler.java
----------------------------------------------------------------------
diff --git a/libraries/rest/src/test/java/org/apache/polygene/library/rest/admin/RDFAssembler.java b/libraries/rest/src/test/java/org/apache/polygene/library/rest/admin/RDFAssembler.java
index f028d77..654f0d1 100644
--- a/libraries/rest/src/test/java/org/apache/polygene/library/rest/admin/RDFAssembler.java
+++ b/libraries/rest/src/test/java/org/apache/polygene/library/rest/admin/RDFAssembler.java
@@ -26,7 +26,6 @@ import org.apache.polygene.bootstrap.AssemblyException;
 import org.apache.polygene.bootstrap.ModuleAssembly;
 import org.apache.polygene.library.rdf.entity.EntityStateSerializer;
 import org.apache.polygene.library.rdf.entity.EntityTypeSerializer;
-import org.apache.polygene.valueserialization.orgjson.OrgJsonValueSerializationAssembler;
 
 /**
  * JAVADOC
@@ -37,7 +36,6 @@ class RDFAssembler
     public void assemble( ModuleAssembly module )
         throws AssemblyException
     {
-        new OrgJsonValueSerializationAssembler().assemble( module );
         module.objects( EntityStateSerializer.class ).visibleIn( Visibility.application );
         module.objects( EntityTypeSerializer.class ).visibleIn( Visibility.application );
     }

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/restlet/build.gradle
----------------------------------------------------------------------
diff --git a/libraries/restlet/build.gradle b/libraries/restlet/build.gradle
index 35cd1d9..8285584 100644
--- a/libraries/restlet/build.gradle
+++ b/libraries/restlet/build.gradle
@@ -28,7 +28,6 @@ jar { manifest { name = "Apache Polygene\u2122 Library - Restlet" } }
 dependencies {
 
   compile polygene.core.bootstrap
-  compile polygene.extension( 'valueserialization-jackson' )
   compile polygene.extension( 'indexing-rdf' )
   compile polygene.extension( 'entitystore-file' )
   compile libraries.restlet

http://git-wip-us.apache.org/repos/asf/polygene-java/blob/e4cca11e/libraries/restlet/src/main/java/org/apache/polygene/library/restlet/assembly/RestletCrudConnectivityAssembler.java
----------------------------------------------------------------------
diff --git a/libraries/restlet/src/main/java/org/apache/polygene/library/restlet/assembly/RestletCrudConnectivityAssembler.java b/libraries/restlet/src/main/java/org/apache/polygene/library/restlet/assembly/RestletCrudConnectivityAssembler.java
index 3979194..815691a 100644
--- a/libraries/restlet/src/main/java/org/apache/polygene/library/restlet/assembly/RestletCrudConnectivityAssembler.java
+++ b/libraries/restlet/src/main/java/org/apache/polygene/library/restlet/assembly/RestletCrudConnectivityAssembler.java
@@ -38,7 +38,6 @@ import org.apache.polygene.library.restlet.resource.EntryPointResource;
 import org.apache.polygene.library.restlet.resource.ResourceBuilder;
 import org.apache.polygene.library.restlet.serialization.FormRepresentation;
 import org.apache.polygene.library.restlet.serialization.JsonRepresentation;
-import org.apache.polygene.valueserialization.jackson.JacksonValueSerializationAssembler;
 
 public class RestletCrudConnectivityAssembler
     implements Assembler
@@ -65,6 +64,5 @@ public class RestletCrudConnectivityAssembler
                         PolygeneEntityRestlet.class )
             .visibleIn( Visibility.layer );
         module.services( ResourceBuilder.class ).visibleIn( Visibility.layer );
-        new JacksonValueSerializationAssembler().assemble( module );
     }
 }