You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by sa...@apache.org on 2015/07/27 23:36:02 UTC

incubator-johnzon git commit: implemented a lot of jsr 374 stuff. may not compile

Repository: incubator-johnzon
Updated Branches:
  refs/heads/jsr374_367 01b412b80 -> 6b5d4bb4e


implemented a lot of jsr 374 stuff. may not compile


Project: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/commit/6b5d4bb4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/tree/6b5d4bb4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-johnzon/diff/6b5d4bb4

Branch: refs/heads/jsr374_367
Commit: 6b5d4bb4eb20334ccbebd1fc60ea50d448513de4
Parents: 01b412b
Author: Hendrik Saly <he...@gmail.com>
Authored: Mon Jul 27 23:35:55 2015 +0200
Committer: Hendrik Saly <he...@gmail.com>
Committed: Mon Jul 27 23:35:55 2015 +0200

----------------------------------------------------------------------
 .../johnzon/core/JsonArrayBuilderImpl.java      |  98 +++----
 .../johnzon/core/JsonBuilderFactoryImpl.java    |   6 +-
 .../apache/johnzon/core/JsonGeneratorImpl.java  |   4 +-
 .../johnzon/core/JsonObjectBuilderImpl.java     |  27 +-
 .../apache/johnzon/core/JsonProviderImpl.java   |  94 ++++++-
 .../org/apache/johnzon/core/JsonReaderImpl.java |  11 +-
 .../johnzon/core/JsonStreamParserImpl.java      | 254 +++++++++++++++++--
 .../org/apache/johnzon/core/JsonWriterImpl.java |   5 +-
 .../johnzon/core/JsonGeneratorImplTest.java     |  45 ++++
 .../org/apache/johnzon/core/JsonParserTest.java | 220 ++++++++++++++++
 .../apache/johnzon/core/JsonPointerTest.java    |  95 +++++++
 .../apache/johnzon/core/JsonWriterImplTest.java |  28 ++
 12 files changed, 800 insertions(+), 87 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
index 6110249..60ede7e 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonArrayBuilderImpl.java
@@ -25,6 +25,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import javax.json.Json;
 import javax.json.JsonArray;
 import javax.json.JsonArrayBuilder;
 import javax.json.JsonObjectBuilder;
@@ -130,145 +131,146 @@ class JsonArrayBuilderImpl implements JsonArrayBuilder, Serializable {
 
     @Override
     public JsonArrayBuilder addAll(JsonArrayBuilder builder) {
-        // TODO Auto-generated method stub
-        return null;
+        tmpList.addAll(builder.build()); //TODO is it ok to call build() here and destry the builder?
+        return this;
     }
 
     @Override
     public JsonArrayBuilder add(int index, JsonValue value) {
-        // TODO Auto-generated method stub
-        return null;
+        tmpList.add(index, value);
+        return this;
+        
     }
 
     @Override
     public JsonArrayBuilder add(int index, String value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.add(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder add(int index, BigDecimal value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.add(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder add(int index, BigInteger value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.add(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder add(int index, int value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.add(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder add(int index, long value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.add(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder add(int index, double value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.add(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder add(int index, boolean value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.add(index, value?JsonValue.TRUE:JsonValue.FALSE);
+        return this;
     }
 
     @Override
     public JsonArrayBuilder addNull(int index) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.add(index, JsonValue.NULL);
+        return this;
     }
 
     @Override
     public JsonArrayBuilder add(int index, JsonObjectBuilder builder) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.add(index, builder.build()); //TODO ok to call build()?
+        return this;
     }
 
     @Override
     public JsonArrayBuilder add(int index, JsonArrayBuilder builder) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.add(index, builder.build()); //TODO ok to call build()?
+        return this;
     }
 
     @Override
     public JsonArrayBuilder set(int index, JsonValue value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, value);
+        return this;
     }
 
     @Override
     public JsonArrayBuilder set(int index, String value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder set(int index, BigDecimal value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder set(int index, BigInteger value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder set(int index, int value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder set(int index, long value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder set(int index, double value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, Json.createValue(value));
+        return this;
     }
 
     @Override
     public JsonArrayBuilder set(int index, boolean value) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, value?JsonValue.TRUE:JsonValue.FALSE);
+        return this;
     }
 
     @Override
     public JsonArrayBuilder setNull(int index) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, JsonValue.NULL);
+        return this;
     }
 
     @Override
     public JsonArrayBuilder set(int index, JsonObjectBuilder builder) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, builder.build()); //TODO ok here to call build?
+        return this;
     }
 
     @Override
     public JsonArrayBuilder set(int index, JsonArrayBuilder builder) {
-        // TODO Auto-generated method stub
-        return null;
+    	tmpList.set(index, builder.build()); //TODO ok here to call build?
+        return this;
     }
 
     @Override
     public JsonArrayBuilder remove(int index) {
-        // TODO Auto-generated method stub
-        return null;
+        tmpList.remove(index);
+        return this;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
index 21b45ce..2744def 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonBuilderFactoryImpl.java
@@ -69,13 +69,11 @@ class JsonBuilderFactoryImpl implements JsonBuilderFactory {
 
     @Override
     public JsonObjectBuilder createObjectBuilder(JsonObject object) {
-        // TODO Auto-generated method stub
-        return null;
+    	return new JsonObjectBuilderImpl().addAll(object);
     }
 
     @Override
     public JsonArrayBuilder createArrayBuilder(JsonArray array) {
-        // TODO Auto-generated method stub
-        return null;
+    	return new JsonArrayBuilderImpl().add(array);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java
index 7545da4..776512c 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java
@@ -734,8 +734,10 @@ class JsonGeneratorImpl implements JsonGenerator, JsonChars, Serializable {
     }
 
     private void checkArray() {
-        if (currentStructureElement == null || !currentStructureElement.isArray) {
+        if (currentStructureElement != null && !currentStructureElement.isArray) {
             throw new JsonGenerationException("write(param) is only valid in arrays");
+        } else {
+        	valid = true;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
index 68677c4..671dc56 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonObjectBuilderImpl.java
@@ -99,14 +99,18 @@ class JsonObjectBuilderImpl implements JsonObjectBuilder, Serializable {
         return this;
     }
     
+    private void ensureMapCreated() {
+    	 if(tmpMap==null){
+             tmpMap=new LinkedHashMap<String, JsonValue>();
+         }
+    }
+    
     private void putValue(String name, JsonValue value){
         if(name == null || value == null) {
             throw npe();
         }
         
-        if(tmpMap==null){
-            tmpMap=new LinkedHashMap<String, JsonValue>();
-        }
+        ensureMapCreated();
         
         tmpMap.put(name, value);
     }
@@ -131,13 +135,22 @@ class JsonObjectBuilderImpl implements JsonObjectBuilder, Serializable {
 
     @Override
     public JsonObjectBuilder addAll(JsonObjectBuilder builder) {
-        // TODO Auto-generated method stub
-        return null;
+    	ensureMapCreated();
+        tmpMap.putAll(builder.build()); //TODO is it ok to build() here and destroy the builder?
+        return this;
+    }
+    
+    JsonObjectBuilder addAll(JsonObject object) {
+    	ensureMapCreated();
+        tmpMap.putAll(object); //TODO missing in spec?
+        return this;
     }
 
     @Override
     public JsonObjectBuilder remove(String name) {
-        // TODO Auto-generated method stub
-        return null;
+    	if(tmpMap != null) {
+    		tmpMap.remove(name);
+    	}
+        return this;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
index d1bbec6..15013c1 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
@@ -23,13 +23,19 @@ import java.io.OutputStream;
 import java.io.Reader;
 import java.io.Serializable;
 import java.io.Writer;
+import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.util.Map;
 
+import javax.json.JsonArray;
 import javax.json.JsonArrayBuilder;
 import javax.json.JsonBuilderFactory;
+import javax.json.JsonNumber;
+import javax.json.JsonObject;
 import javax.json.JsonObjectBuilder;
 import javax.json.JsonReader;
 import javax.json.JsonReaderFactory;
+import javax.json.JsonString;
 import javax.json.JsonWriter;
 import javax.json.JsonWriterFactory;
 import javax.json.spi.JsonProvider;
@@ -115,8 +121,52 @@ public class JsonProviderImpl extends JsonProvider implements Serializable {
     public JsonBuilderFactory createBuilderFactory(final Map<String, ?> stringMap) {
         return DELEGATE.createBuilderFactory(stringMap);
     }
+    
+    
 
-    static class JsonProviderDelegate extends JsonProvider {
+    @Override
+	public JsonObjectBuilder createObjectBuilder(JsonObject object) {
+    	return DELEGATE.createObjectBuilder(object);
+	}
+
+	@Override
+	public JsonArrayBuilder createArrayBuilder(JsonArray array) {
+		return DELEGATE.createArrayBuilder(array);
+	}
+
+	@Override
+	public JsonString createValue(String value) {
+		return DELEGATE.createValue(value);
+	}
+
+	@Override
+	public JsonNumber createValue(int value) {
+		return DELEGATE.createValue(value);
+	}
+
+	@Override
+	public JsonNumber createValue(long value) {
+		return DELEGATE.createValue(value);
+	}
+
+	@Override
+	public JsonNumber createValue(double value) {
+		return DELEGATE.createValue(value);
+	}
+
+	@Override
+	public JsonNumber createValue(BigDecimal value) {
+		return DELEGATE.createValue(value);
+	}
+
+	@Override
+	public JsonNumber createValue(BigInteger value) {
+		return DELEGATE.createValue(value);
+	}
+
+
+
+	static class JsonProviderDelegate extends JsonProvider {
         private final JsonReaderFactory readerFactory = new JsonReaderFactoryImpl(null);
         private final JsonParserFactory parserFactory = new JsonParserFactoryImpl(null);
         private final JsonGeneratorFactory generatorFactory = new JsonGeneratorFactoryImpl(null);
@@ -197,5 +247,47 @@ public class JsonProviderImpl extends JsonProvider implements Serializable {
         public JsonBuilderFactory createBuilderFactory(final Map<String, ?> config) {
             return (config == null || config.isEmpty()) ? builderFactory : new JsonBuilderFactoryImpl(config);
         }
+
+		@Override
+		public JsonObjectBuilder createObjectBuilder(JsonObject object) {
+			return builderFactory.createObjectBuilder(object);
+		}
+
+		@Override
+		public JsonArrayBuilder createArrayBuilder(JsonArray array) {
+			return builderFactory.createArrayBuilder(array);
+		}
+
+		@Override
+		public JsonString createValue(String value) {
+			return new JsonStringImpl(value);
+		}
+
+		@Override
+		public JsonNumber createValue(int value) {
+			return new JsonLongImpl(value);
+		}
+
+		@Override
+		public JsonNumber createValue(long value) {
+			return new JsonLongImpl(value);
+		}
+
+		@Override
+		public JsonNumber createValue(double value) {
+			return new JsonDoubleImpl(value);
+		}
+
+		@Override
+		public JsonNumber createValue(BigDecimal value) {
+			return new JsonNumberImpl(value);
+		}
+
+		@Override
+		public JsonNumber createValue(BigInteger value) {
+			return new JsonNumberImpl(new BigDecimal(value));
+		}
+        
+        
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
index 86d7708..fa54d07 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java
@@ -30,9 +30,16 @@ import javax.json.stream.JsonParsingException;
 class JsonReaderImpl implements JsonReader {
     private final JsonParser parser;
     private boolean closed = false;
+    private final boolean readUntiltheEnd;
 
     JsonReaderImpl(final JsonParser parser) {
         this.parser = parser;
+        this.readUntiltheEnd = true;
+    }
+    
+    JsonReaderImpl(final JsonParser parser, boolean readUntiltheEnd) {
+        this.parser = parser;
+        this.readUntiltheEnd = readUntiltheEnd;
     }
 
     @Override
@@ -47,7 +54,7 @@ class JsonReaderImpl implements JsonReader {
             case START_OBJECT:
                 final JsonObjectBuilder objectBuilder = new JsonObjectBuilderImpl();
                 parseObject(objectBuilder);
-                if (parser.hasNext()) {
+                if (readUntiltheEnd && parser.hasNext()) {
                     throw new JsonParsingException("Expected end of file", parser.getLocation());
                 }
                 close();
@@ -55,7 +62,7 @@ class JsonReaderImpl implements JsonReader {
             case START_ARRAY:
                 final JsonArrayBuilder arrayBuilder = new JsonArrayBuilderImpl();
                 parseArray(arrayBuilder);
-                if (parser.hasNext()) {
+                if (readUntiltheEnd && parser.hasNext()) {
                     throw new JsonParsingException("Expected end of file", parser.getLocation());
                 }
                 close();

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
index 3778b3b..b209378 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java
@@ -24,12 +24,25 @@ import java.io.InputStreamReader;
 import java.io.Reader;
 import java.math.BigDecimal;
 import java.nio.charset.Charset;
+import java.util.Map.Entry;
+import java.util.AbstractMap;
 import java.util.NoSuchElementException;
-
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+import javax.json.Json;
+import javax.json.JsonArray;
 import javax.json.JsonException;
+import javax.json.JsonObject;
+import javax.json.JsonReaderFactory;
+import javax.json.JsonValue;
 import javax.json.stream.JsonLocation;
 import javax.json.stream.JsonParser;
 import javax.json.stream.JsonParsingException;
+import javax.json.stream.JsonParser.Event;
 
 //This class represents either the Json tokenizer and the Json parser.
 public class JsonStreamParserImpl implements JsonChars, JsonParser{
@@ -65,7 +78,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
     //we use a byte here, because comparing bytes
     //is more efficient than comparing enums
     //Additionally we handle internally two more event: COMMA_EVENT and KEY_SEPARATOR_EVENT
-    private byte previousEvent;
+    private byte previousEvent = -1;
 
     //this buffer is used to store current String or Number value in case that
     //within the value a buffer boundary is crossed or the string contains escaped characters
@@ -105,6 +118,14 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
             this.previous = previous;
             this.isArray = isArray;
         }
+        
+        int getDepth() {
+        	if(previous == null) {
+        		return 1;
+        	} else {
+        		return previous.getDepth()+1; 
+        	}
+        }
     }
 
     //detect charset according to RFC 4627
@@ -139,6 +160,10 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
         if (fallBackCopyBuffer.length < maxStringLength) {
             throw cust("Size of value buffer cannot be smaller than maximum string length");
         }
+        
+        if(reader == null && inputStream == null) {
+        	throw new NullPointerException("input must not be null");
+        }
 
         if (reader != null) {
             this.in = reader;
@@ -176,21 +201,15 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
 
         startOfValueInBuffer = endOfValueInBuffer = -1;
     }
-
-    @Override
-    public final boolean hasNext() {
-
-        if (currentStructureElement != null || (previousEvent != END_ARRAY && previousEvent != END_OBJECT) || previousEvent == 0) {
-            return true;
-        }
-
-        //detect garbage at the end of the file after last object or array is closed
-        if (bufferPos < availableCharsInBuffer - 2) {
+    
+    private void scanForTrailingGarbage(int offset) {
+    	//detect garbage at the end of the file after last object or array is closed
+        if (bufferPos < availableCharsInBuffer - offset) {
 
             final char c = readNextNonWhitespaceChar(readNextChar());
 
             if (c == EOF) {
-                return false;
+                return;
             }
 
             if (bufferPos < availableCharsInBuffer) {
@@ -198,6 +217,25 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
             }
 
         }
+    }
+
+    @Override
+    public final boolean hasNext() {
+
+    	if(currentStructureElement == null && (previousEvent == VALUE_FALSE
+        		|| previousEvent == VALUE_TRUE
+        		|| previousEvent == VALUE_NULL
+        		|| previousEvent == VALUE_NUMBER
+        		|| previousEvent == VALUE_STRING)) {
+    		scanForTrailingGarbage(0);
+    		return false;
+    	}
+    	
+        if (currentStructureElement != null || previousEvent == -1) {
+            return true;
+        }
+
+        scanForTrailingGarbage(2);
 
         return false;
 
@@ -326,10 +364,6 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
             throw new NoSuchElementException();
         }
 
-        if (previousEvent != 0 && currentStructureElement == null) {
-            throw uexc("Unexpected end of structure");
-        }
-
         final char c = readNextNonWhitespaceChar(readNextChar());
 
         if (c == COMMA_CHAR) {
@@ -426,7 +460,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
     private Event handleStartObject() {
 
         //last event must one of the following-> : , [
-        if (previousEvent != 0 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
+        if (previousEvent != -1 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
             throw uexc("Expected : , [");
         }
 
@@ -463,7 +497,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
     private Event handleStartArray() {
 
         //last event must one of the following-> : , [
-        if (previousEvent != 0 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
+        if (previousEvent != -1 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
             throw uexc("Expected : , [");
         }
 
@@ -625,7 +659,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
         //always the beginning quote of a key or value  
 
         //last event must one of the following-> : { [ ,
-        if (previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_OBJECT && previousEvent != START_ARRAY
+        if (previousEvent != -1 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_OBJECT && previousEvent != START_ARRAY
                 && previousEvent != COMMA_EVENT) {
             throw uexc("Expected : { [ ,");
         }
@@ -634,7 +668,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
         //end quote already consumed
 
         //make the decision if its an key or value
-        if (previousEvent == KEY_SEPARATOR_EVENT) {
+        if (previousEvent == KEY_SEPARATOR_EVENT || previousEvent == -1) {
             //must be value
 
             if (currentStructureElement != null && currentStructureElement.isArray) {
@@ -770,7 +804,7 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
     private Event handleLiteral() {
 
         //last event must one of the following-> : , [
-        if (previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
+        if (previousEvent != -1 && previousEvent != KEY_SEPARATOR_EVENT && previousEvent != START_ARRAY && previousEvent != COMMA_EVENT) {
             throw uexc("Expected : , [");
         }
 
@@ -982,5 +1016,181 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{
         final JsonLocation location = createLocation();
         return new JsonParsingException("General exception on " + location + ". Reason is [[" + message + "]]", location);
     }
+    
+    private IllegalStateException is(final String message) {
+        final JsonLocation location = createLocation();
+        return new IllegalStateException("Illegal parser state exception on " + location + ". Reason is [[" + message + "]]");
+    }
+
+	@Override
+	public JsonObject getObject() {
+		JsonReaderImpl reader = new JsonReaderImpl(this, false);
+		JsonObject obj;
+		try {
+			obj = reader.readObject();
+		} catch (JsonParsingException e) {
+			throw is(e.getMessage());
+		} finally {
+			reader.close();
+		}
+
+		return obj;
+	}
+
+	@Override
+	public JsonValue getValue() {
+		if(previousEvent == VALUE_TRUE) {
+			return JsonValue.TRUE;
+		}
+		
+		if(previousEvent == VALUE_FALSE) {
+			return JsonValue.FALSE;
+		}
+		
+		if(previousEvent == VALUE_NULL) {
+			return JsonValue.NULL;
+		}
+		
+		if(previousEvent == VALUE_NUMBER) {
+			if (isCurrentNumberIntegral && currentIntegralNumber != Integer.MIN_VALUE) {
+	            return Json.createValue(currentIntegralNumber);
+	        } else if (isCurrentNumberIntegral) {
+	            return Json.createValue(getLong());
+	        } else {
+	        	return Json.createValue(getBigDecimal());
+	        }
+		}
+		
+		if(previousEvent == VALUE_STRING) {
+			return Json.createValue(getString());
+		}
+		
+		//never happen
+		return null;
+	}
+
+	@Override
+	public JsonArray getArray() {
+		JsonReaderImpl reader = new JsonReaderImpl(this, false);
+		JsonArray ar;
+		try {
+			ar = reader.readArray();
+		} catch (JsonParsingException e) {
+			throw is(e.getMessage());
+		} finally {
+			reader.close();
+		}
+
+		return ar;
+	}
+
+	@Override
+	public Stream<JsonValue> getArrayStream() {
+        //TODO check for beginning of an array
+        Spliterator<JsonValue> spliterator = new Spliterators.AbstractSpliterator<JsonValue>(Long.MAX_VALUE, Spliterator.ORDERED) {
+            @Override
+            public Spliterator<JsonValue> trySplit() {
+                return null;
+            }
+            @Override
+            public boolean tryAdvance(Consumer<? super JsonValue> action) {
+                if (action == null) {
+                    throw new NullPointerException();
+                }
+                if (!hasNext()) {
+                    return false;
+                }
+                if (next() == Event.END_ARRAY) {
+                    return false;
+                }
+                action.accept(getValue());
+                return true;
+            }
+        };
+        
+        return StreamSupport.stream(spliterator, false);
+	}
+
+	@Override
+	public Stream<Entry<String, JsonValue>> getObjectStream() {
+		//TODO check for beginning of an object
+        Spliterator<Entry<String, JsonValue>> spliterator = new Spliterators.AbstractSpliterator<Entry<String, JsonValue>>(Long.MAX_VALUE, Spliterator.ORDERED) {
+            @Override
+            public Spliterator<Entry<String, JsonValue>> trySplit() {
+                return null;
+            }
+            @Override
+            public boolean tryAdvance(Consumer<? super Entry<String, JsonValue>> action) {
+            	 if (action == null) {
+                     throw new NullPointerException();
+                 }
+                 if (!hasNext()) {
+                     return false;
+                 }
+                 Event event = next();
+                 if (event == Event.END_OBJECT) {
+                     return false;
+                 }
+                 if (event != Event.KEY_NAME) {
+                     throw new JsonException("error generating stream, key name token expected");
+                 }
+                 String key = getString();
+                 if (!hasNext()) {
+                     throw new JsonException("error generating stream, more tokens expected");
+                 }
+                 next();
+                 JsonValue value = getValue();
+                 action.accept(new AbstractMap.SimpleImmutableEntry<String, JsonValue>(key, value));
+                 return true;
+            }
+        };
+        
+        return StreamSupport.stream(spliterator, false);
+	}
+
+	@Override
+	public Stream<JsonValue> getValueStream() {
+		//TODO check for value
+        Spliterator<JsonValue> spliterator = new Spliterators.AbstractSpliterator<JsonValue>(Long.MAX_VALUE, Spliterator.ORDERED) {
+            @Override
+            public Spliterator<JsonValue> trySplit() {
+                return null;
+            }
+            @Override
+            public boolean tryAdvance(Consumer<? super JsonValue> action) {
+                if (action == null) {
+                    throw new NullPointerException();
+                }
+                if (!hasNext()) {
+                    return false;
+                }
+                next();
+                action.accept(getValue());
+                return true;
+            }
+        };
+        
+        return StreamSupport.stream(spliterator, false);
+	}
+
+	@Override
+	public void skipArray() {
+		if(currentStructureElement != null && currentStructureElement.isArray) {
+			int depth = currentStructureElement.getDepth();
+			while(next() != Event.END_ARRAY || currentStructureElement.getDepth() != depth);
+		}
+	}
+
+	@Override
+	public void skipObject() {
+		if(currentStructureElement != null && !currentStructureElement.isArray) {
+			int depth = currentStructureElement.getDepth();
+			while(next() != Event.END_OBJECT || currentStructureElement.getDepth() != depth);
+		}
+	}
+    
+    //1.1
+    
+    
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
index 5c14b3f..9578258 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
@@ -74,7 +74,8 @@ class JsonWriterImpl implements JsonWriter, Serializable{
 
     @Override
     public void write(JsonValue value) {
-        // TODO Auto-generated method stub
-        
+    	checkClosed();
+        generator.write(value);
+        close();
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/test/java/org/apache/johnzon/core/JsonGeneratorImplTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonGeneratorImplTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonGeneratorImplTest.java
index 4f73aaa..d202047 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonGeneratorImplTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonGeneratorImplTest.java
@@ -278,4 +278,49 @@ public class JsonGeneratorImplTest {
                         "  ]\n" +
                         "}", new String(baos.toByteArray()));
     }
+    
+    @Test
+    public void testSimpleNumber() {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Json.createGenerator(baos)
+        .write(1)
+        .close();
+         assertEquals("1", new String(baos.toByteArray()));
+    }
+    
+    @Test
+    public void testSimpleNumberAsJsonValue() {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Json.createGenerator(baos)
+        .write(Json.createValue(1))
+        .close();
+         assertEquals("1", new String(baos.toByteArray()));
+    }
+    
+    @Test
+    public void testSimpleString() {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Json.createGenerator(baos)
+        .write("a string")
+        .close();
+         assertEquals("\"a string\"", new String(baos.toByteArray()));
+    }
+    
+    @Test
+    public void testSimpleStringAsJsonValue() {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Json.createGenerator(baos)
+        .write(Json.createValue("a string"))
+        .close();
+         assertEquals("\"a string\"", new String(baos.toByteArray()));
+    }
+    
+    @Test
+    public void testSimpleTrue() {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        Json.createGenerator(baos)
+        .write(JsonValue.TRUE)
+        .close();
+         assertEquals("true", new String(baos.toByteArray()));
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
index 87146f2..451e182 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonParserTest.java
@@ -41,6 +41,7 @@ import javax.json.JsonArrayBuilder;
 import javax.json.JsonException;
 import javax.json.JsonObjectBuilder;
 import javax.json.JsonReader;
+import javax.json.JsonValue;
 import javax.json.stream.JsonParser;
 import javax.json.stream.JsonParser.Event;
 import javax.json.stream.JsonParsingException;
@@ -1637,6 +1638,225 @@ public class JsonParserTest {
         }
     }
     
+    @Test
+    public void simpleValueTrue() {
+        final JsonParser parser = Json.createParser(new StringReader("  true"));
+        assertNotNull(parser);
+        assertTrue(parser.hasNext());
+        final JsonParser.Event event = parser.next();
+        assertNotNull(event);
+        assertEquals(JsonParser.Event.VALUE_TRUE, event);
+        assertEquals(JsonValue.TRUE, parser.getValue());
+        assertFalse(parser.hasNext());
+    }
+    
+    @Test
+    public void simpleValueFalse() {
+        final JsonParser parser = Json.createParser(new StringReader("  false  "));
+        assertNotNull(parser);
+        assertTrue(parser.hasNext());
+        final JsonParser.Event event = parser.next();
+        assertNotNull(event);
+        assertEquals(JsonParser.Event.VALUE_FALSE, event);
+        assertEquals(JsonValue.FALSE, parser.getValue());
+        assertFalse(parser.hasNext());
+    }
+    
+    @Test
+    public void simpleValueNumber() {
+        final JsonParser parser = Json.createParser(new StringReader("  2.162  "));
+        assertNotNull(parser);
+        assertTrue(parser.hasNext());
+        final JsonParser.Event event = parser.next();
+        assertNotNull(event);
+        assertEquals(JsonParser.Event.VALUE_NUMBER, event);
+        assertEquals(Json.createValue(2.162), parser.getValue());
+        assertFalse(parser.hasNext());
+    }
+    
+    @Test
+    public void simpleValueString() {
+        final JsonParser parser = Json.createParser(new StringReader("\"astring\""));
+        assertNotNull(parser);
+        assertTrue(parser.hasNext());
+        final JsonParser.Event event = parser.next();
+        assertNotNull(event);
+        assertEquals(JsonParser.Event.VALUE_STRING, event);
+        assertEquals(Json.createValue("astring"), parser.getValue());
+        assertFalse(parser.hasNext());
+    }
+    
+    @Test
+    public void simpleValueNull() {
+        final JsonParser parser = Json.createParser(new StringReader("\t\tnull"));
+        assertNotNull(parser);
+        assertTrue(parser.hasNext());
+        final JsonParser.Event event = parser.next();
+        assertNotNull(event);
+        assertEquals(JsonParser.Event.VALUE_NULL, event);
+        assertEquals(JsonValue.NULL, parser.getValue());
+        assertFalse(parser.hasNext());
+    }
+    
+    @Test(expected=JsonParsingException.class)
+    public void simpleValueWrongLiteral() {
+        final JsonParser parser = Json.createParser(new StringReader("nuull"));
+        assertNotNull(parser);
+        while(parser.hasNext()) {
+        	parser.next();
+        }
+    }
+    
+    @Test(expected=JsonParsingException.class)
+    public void simpleValuePlusGarbage() {
+        final JsonParser parser = Json.createParser(new StringReader("null,"));
+        assertNotNull(parser);
+        while(parser.hasNext()) {
+        	parser.next();
+        }
+    }
+    
+    @Test(expected=JsonParsingException.class)
+    public void simpleValuePlusGarbage1() {
+        final JsonParser parser = Json.createParser(new StringReader("null:"));
+        assertNotNull(parser);
+        while(parser.hasNext()) {
+        	parser.next();
+        }
+    }
+    
+    @Test(expected=JsonParsingException.class)
+    public void simpleValuePlusMoreGarbage() {
+        final JsonParser parser = Json.createParser(new StringReader("null[1,2,3]"));
+        assertNotNull(parser);
+        while(parser.hasNext()) {
+        	parser.next();
+        }
+    }
+    
+    @Test(expected=JsonParsingException.class)
+    public void simpleValuePlusMoreGarbage2() {
+        final JsonParser parser = Json.createParser(new StringReader("null,[1,2,3]"));
+        assertNotNull(parser);
+        while(parser.hasNext()) {
+        	parser.next();
+        }
+    }
+    
+    @Test(expected=JsonParsingException.class)
+    public void simpleValuePlusMoreGarbage3() {
+        final JsonParser parser = Json.createParser(new StringReader("12{\"a\":5}"));
+        assertNotNull(parser);
+        while(parser.hasNext()) {
+        	parser.next();
+        }
+    }
+    
+    @Test(expected=JsonParsingException.class)
+    public void simpleValuePlusMoreGarbage4() {
+        final JsonParser parser = Json.createParser(new StringReader("12 true"));
+        assertNotNull(parser);
+        while(parser.hasNext()) {
+        	parser.next();
+        }
+    }
+    
+    @Test
+    public void getObjectFromParser() {
+        final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, \"b\":{\"c\":9, \"d\":10}, \"z\":8"));
+        assertNotNull(parser);
+        parser.next();
+        parser.next();
+        parser.next();
+        parser.next();
+        assertEquals("{\"c\":9,\"d\":10}", parser.getObject().toString());
+        assertTrue(parser.next() == Event.KEY_NAME);
+    }
+    
+    @Test
+    public void getObjectFromParserNested() {
+        final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, \"b\":{\"c\":9, \"d\":10, \"r\":{\"q\":19, \"s\":144}}, \"z\":8"));
+        assertNotNull(parser);
+        parser.next();
+        parser.next();
+        parser.next();
+        parser.next();
+        assertEquals("{\"c\":9,\"d\":10,\"r\":{\"q\":19,\"s\":144}}", parser.getObject().toString());
+        assertTrue(parser.next() == Event.KEY_NAME);
+    }
+    
+    @Test(expected=IllegalStateException.class)
+    public void getObjectFromParserWrongState() {
+        final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, \"b\":{\"c\":9, \"d\":10}, \"z\":8"));
+        assertNotNull(parser);
+        parser.next();
+        parser.next();
+        parser.next();
+        assertEquals("{\"c\":9,\"d\":10}", parser.getObject().toString());
+        assertTrue(parser.next() == Event.KEY_NAME);
+    }
+    
+    @Test
+    public void getArrayFromParser() {
+        final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, [1,2,3,4,5], \"z\":8"));
+        assertNotNull(parser);
+        parser.next();
+        parser.next();
+        parser.next();
+        assertEquals("[1,2,3,4,5]", parser.getArray().toString());
+        assertTrue(parser.next() == Event.KEY_NAME);
+    }
+    
+    @Test
+    public void getArrayFromParserNested() {
+        final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, [1,2,3,4,5,[2,2,3,4,5]], \"z\":8"));
+        assertNotNull(parser);
+        parser.next();
+        parser.next();
+        parser.next();
+        assertEquals("[1,2,3,4,5,[2,2,3,4,5]]", parser.getArray().toString());
+        assertTrue(parser.next() == Event.KEY_NAME);
+    }
+    
+    @Test(expected=IllegalStateException.class)
+    public void getArrayFromParserWrogState() {
+        final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, [1,2,3,4,5,[2,2,3,4,5]], \"z\":8"));
+        assertNotNull(parser);
+        parser.next();
+        parser.next();
+        assertEquals("[1,2,3,4,5,[2,2,3,4,5]]", parser.getArray().toString());
+        assertTrue(parser.next() == Event.KEY_NAME);
+    }
+    
+    @Test
+    public void skipObject() {
+        final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, \"b\":{\"c\":9, \"d\":10, \"r\":{\"q\":19, \"s\":144}}, \"z\":8"));
+        assertNotNull(parser);
+        parser.next();
+        parser.next();
+        parser.next();
+        parser.next();
+        parser.next();
+        parser.skipObject();
+        parser.next();
+        assertEquals(Event.KEY_NAME, parser.next());
+        assertEquals("z",parser.getString());
+    }
+    
+    @Test
+    public void skipArray() {
+        final JsonParser parser = Json.createParser(new StringReader("{\"a\":5, [1,2,3,4,5,[2,2,3,4,5]], \"z\":8"));
+        assertNotNull(parser);
+        parser.next();
+        parser.next();
+        parser.next();
+        parser.next();
+        parser.skipArray();
+        parser.next();
+        assertTrue(parser.next() == Event.KEY_NAME);
+        assertEquals("z",parser.getString());
+    }
+    
     class AttemptingInputStream extends ByteArrayInputStream {
 
         public AttemptingInputStream(byte[] buf) {

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java
new file mode 100644
index 0000000..21a5063
--- /dev/null
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java
@@ -0,0 +1,95 @@
+package org.apache.johnzon.core;
+
+import static org.junit.Assert.*;
+
+import javax.json.Json;
+import javax.json.JsonException;
+import javax.json.JsonNumber;
+import javax.json.JsonObject;
+import javax.json.JsonPointer;
+import javax.json.JsonReader;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+import javax.json.JsonValue.ValueType;
+import javax.json.spi.JsonProvider;
+
+import org.junit.Test;
+
+public class JsonPointerTest {
+	
+	@Test
+	public void testEmptyJsonPointer() {
+		final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+        assertNotNull(loadInMemReader);
+        JsonObject obj = loadInMemReader.readObject();
+        assertEquals(obj, new JsonPointer("").getValue(obj));
+	}
+	
+	@Test
+	public void testSimpleJsonPointer() {
+		final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+        assertNotNull(loadInMemReader);
+        JsonObject obj = loadInMemReader.readObject();
+        JsonValue result = new JsonPointer("/a").getValue(obj);
+        assertNotNull(result);
+		assertEquals("b", ((JsonString) result).getString());
+	}
+	
+	@Test
+	public void testJsonPointer1() {
+		final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+        assertNotNull(loadInMemReader);
+        JsonObject obj = loadInMemReader.readObject();
+        JsonValue result = new JsonPointer("/c/d/0").getValue(obj);
+        assertNotNull(result);
+		assertEquals(1, ((JsonNumber) result).intValueExact());
+	}
+	
+	@Test(expected=JsonException.class)
+	public void testNonExistentJsonPointer() {
+		final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+        assertNotNull(loadInMemReader);
+        JsonObject obj = loadInMemReader.readObject();
+        new JsonPointer("/c/d/11").getValue(obj);
+	}
+	
+	@Test(expected=JsonException.class)
+	public void testNonExistentJsonPointer2() {
+		final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+        assertNotNull(loadInMemReader);
+        JsonObject obj = loadInMemReader.readObject();
+        new JsonPointer("/c/q/0").getValue(obj);
+	}
+	
+	@Test(expected=JsonException.class)
+	public void testInvalidPointerNoSlash() {
+		new JsonPointer("a/c/g");
+	}
+	
+	@Test(expected=JsonException.class)
+	public void testInvalidPointerBadEscape() {
+		new JsonPointer("/~2");
+	}
+	
+	@Test(expected=JsonException.class)
+	public void testInvalidPointerBadEscape2() {
+		new JsonPointer("/~v");
+	}
+
+	@Test
+	public void testTrailingSlash() {
+		new JsonPointer("/a/c/g/");
+	}
+	
+	//@Test
+	public void testaddJsonPointer1() {
+		final JsonReader loadInMemReader = Json.createReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("json/nested.json"));
+        assertNotNull(loadInMemReader);
+        JsonObject obj = loadInMemReader.readObject();
+		JsonObject result = new JsonPointer("/c/new").add(obj, Json.createValue("newval"));
+		System.out.println("res "+result);
+		JsonValue newVal = new JsonPointer("/c/new").getValue(result);
+        assertNotNull(newVal);
+		assertEquals("newval", ((JsonString) newVal).getString());
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-johnzon/blob/6b5d4bb4/johnzon-core/src/test/java/org/apache/johnzon/core/JsonWriterImplTest.java
----------------------------------------------------------------------
diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonWriterImplTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonWriterImplTest.java
index d9b2ecd..323e64c 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonWriterImplTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonWriterImplTest.java
@@ -24,6 +24,7 @@ import java.io.ByteArrayOutputStream;
 
 import javax.json.Json;
 import javax.json.JsonObjectBuilder;
+import javax.json.JsonValue;
 import javax.json.JsonWriter;
 
 import org.junit.Test;
@@ -39,4 +40,31 @@ public class JsonWriterImplTest {
         writer.close();
         assertEquals("{\"a\":\"b\"}", new String(out.toByteArray()));
     }
+    
+    @Test
+    public void writerSimpleNumber() {
+        final ByteArrayOutputStream out = new ByteArrayOutputStream();
+        final JsonWriter writer = Json.createWriter(out);
+        writer.write(Json.createValue(1));
+        writer.close();
+        assertEquals("1", new String(out.toByteArray()));
+    }
+    
+    @Test
+    public void writerSimpleString() {
+        final ByteArrayOutputStream out = new ByteArrayOutputStream();
+        final JsonWriter writer = Json.createWriter(out);
+        writer.write(Json.createValue("simple string"));
+        writer.close();
+        assertEquals("\"simple string\"", new String(out.toByteArray()));
+    }
+    
+    @Test
+    public void writerSimpleTrue() {
+        final ByteArrayOutputStream out = new ByteArrayOutputStream();
+        final JsonWriter writer = Json.createWriter(out);
+        writer.write(JsonValue.TRUE);
+        writer.close();
+        assertEquals("true", new String(out.toByteArray()));
+    }
 }