Unified handling of empty input: return always null
[simple-mapper] / src / main / java / de / juplo / jackson / SimpleMapper.java
index 0426720..3dd5509 100644 (file)
@@ -1,16 +1,10 @@
 package de.juplo.jackson;
 
 
-import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.core.JsonLocation;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonToken;
-import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.net.URL;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
@@ -20,7 +14,6 @@ import java.util.Map.Entry;
 import java.util.NoSuchElementException;
 import java.util.Spliterator;
 import static java.util.Spliterator.IMMUTABLE;
-import java.util.Spliterators;
 import java.util.function.Consumer;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
@@ -33,401 +26,12 @@ import org.slf4j.LoggerFactory;
  *
  * @author kai
  */
-public class SimpleMapper
+public abstract class SimpleMapper
 {
   private static final Logger LOG =
       LoggerFactory.getLogger(SimpleMapper.class);
 
 
-  private final JsonFactory factory;
-
-
-  public SimpleMapper(JsonFactory factory)
-  {
-    this.factory = factory;
-  }
-
-
-  public Spliterator<Object> getArraySpliterator(File file)
-      throws
-        IOException
-  {
-    return getArraySpliterator(factory.createParser(file));
-  }
-
-  public Spliterator<Object> getArraySpliterator(InputStream is)
-      throws
-        IOException
-  {
-    return getArraySpliterator(factory.createParser(is));
-  }
-
-  public Spliterator<Object> getArraySpliterator(Reader r)
-      throws
-        IOException
-  {
-    return getArraySpliterator(factory.createParser(r));
-  }
-
-  public Spliterator<Object> getArraySpliterator(String content)
-      throws
-        IOException
-  {
-    return getArraySpliterator(factory.createParser(content));
-  }
-
-  public Spliterator<Object> getArraySpliterator(URL url)
-      throws
-        IOException
-  {
-    return getArraySpliterator(factory.createParser(url));
-  }
-
-  public Spliterator<Object> getArraySpliterator(byte[] data)
-      throws
-        IOException
-  {
-    return getArraySpliterator(factory.createParser(data));
-  }
-
-  public Spliterator<Object> getArraySpliterator(char[] content)
-      throws
-        IOException
-  {
-    return getArraySpliterator(factory.createParser(content));
-  }
-
-  public Spliterator<Object> getArraySpliterator(byte[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getArraySpliterator(factory.createParser(data, offset, len));
-  }
-
-  public Spliterator<Object> getArraySpliterator(char[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getArraySpliterator(factory.createParser(data, offset, len));
-  }
-
-  public Stream<Object> getArrayStream(File file)
-      throws
-        IOException
-  {
-    return getArrayStream(factory.createParser(file));
-  }
-
-  public Stream<Object> getArrayStream(InputStream is)
-      throws
-        IOException
-  {
-    return getArrayStream(factory.createParser(is));
-  }
-
-  public Stream<Object> getArrayStream(Reader r)
-      throws
-        IOException
-  {
-    return getArrayStream(factory.createParser(r));
-  }
-
-  public Stream<Object> getArrayStream(String content)
-      throws
-        IOException
-  {
-    return getArrayStream(factory.createParser(content));
-  }
-
-  public Stream<Object> getArrayStream(URL url)
-      throws
-        IOException
-  {
-    return getArrayStream(factory.createParser(url));
-  }
-
-  public Stream<Object> getArrayStream(byte[] data)
-      throws
-        IOException
-  {
-    return getArrayStream(factory.createParser(data));
-  }
-
-  public Stream<Object> getArrayStream(char[] content)
-      throws
-        IOException
-  {
-    return getArrayStream(factory.createParser(content));
-  }
-
-  public Stream<Object> getArrayStream(byte[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getArrayStream(factory.createParser(data, offset, len));
-  }
-
-  public Stream<Object> getArrayStream(char[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getArrayStream(factory.createParser(data, offset, len));
-  }
-
-  public Iterator<Object> getArrayIterator(File file)
-      throws
-        IOException
-  {
-    return getArrayIterator(factory.createParser(file));
-  }
-
-  public Iterator<Object> getArrayIterator(InputStream is)
-      throws
-        IOException
-  {
-    return getArrayIterator(factory.createParser(is));
-  }
-
-  public Iterator<Object> getArrayIterator(Reader r)
-      throws
-        IOException
-  {
-    return getArrayIterator(factory.createParser(r));
-  }
-
-  public Iterator<Object> getArrayIterator(String content)
-      throws
-        IOException
-  {
-    return getArrayIterator(factory.createParser(content));
-  }
-
-  public Iterator<Object> getArrayIterator(URL url)
-      throws
-        IOException
-  {
-    return getArrayIterator(factory.createParser(url));
-  }
-
-  public Iterator<Object> getArrayIterator(byte[] data)
-      throws
-        IOException
-  {
-    return getArrayIterator(factory.createParser(data));
-  }
-
-  public Iterator<Object> getArrayIterator(char[] content)
-      throws
-        IOException
-  {
-    return getArrayIterator(factory.createParser(content));
-  }
-
-  public Iterator<Object> getArrayIterator(byte[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getArrayIterator(factory.createParser(data, offset, len));
-  }
-
-  public Iterator<Object> getArrayIterator(char[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getArrayIterator(factory.createParser(data, offset, len));
-  }
-
-
-  public Spliterator<Entry<String, Object>> getObjectSpliterator(File file)
-      throws
-        IOException
-  {
-    return getObjectSpliterator(factory.createParser(file));
-  }
-
-  public Spliterator<Entry<String, Object>> getObjectSpliterator(InputStream is)
-      throws
-        IOException
-  {
-    return getObjectSpliterator(factory.createParser(is));
-  }
-
-  public Spliterator<Entry<String, Object>> getObjectSpliterator(Reader r)
-      throws
-        IOException
-  {
-    return getObjectSpliterator(factory.createParser(r));
-  }
-
-  public Spliterator<Entry<String, Object>> getObjectSpliterator(String content)
-      throws
-        IOException
-  {
-    return getObjectSpliterator(factory.createParser(content));
-  }
-
-  public Spliterator<Entry<String, Object>> getObjectSpliterator(URL url)
-      throws
-        IOException
-  {
-    return getObjectSpliterator(factory.createParser(url));
-  }
-
-  public Spliterator<Entry<String, Object>> getObjectSpliterator(byte[] data)
-      throws
-        IOException
-  {
-    return getObjectSpliterator(factory.createParser(data));
-  }
-
-  public Spliterator<Entry<String, Object>> getObjectSpliterator(char[] content)
-      throws
-        IOException
-  {
-    return getObjectSpliterator(factory.createParser(content));
-  }
-
-  public Spliterator<Entry<String, Object>> getObjectSpliterator(byte[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getObjectSpliterator(factory.createParser(data, offset, len));
-  }
-
-  public Spliterator<Entry<String, Object>> getObjectSpliterator(char[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getObjectSpliterator(factory.createParser(data, offset, len));
-  }
-
-  public Stream<Entry<String, Object>> getObjectStream(File file)
-      throws
-        IOException
-  {
-    return getObjectStream(factory.createParser(file));
-  }
-
-  public Stream<Entry<String, Object>> getObjectStream(InputStream is)
-      throws
-        IOException
-  {
-    return getObjectStream(factory.createParser(is));
-  }
-
-  public Stream<Entry<String, Object>> getObjectStream(Reader r)
-      throws
-        IOException
-  {
-    return getObjectStream(factory.createParser(r));
-  }
-
-  public Stream<Entry<String, Object>> getObjectStream(String content)
-      throws
-        IOException
-  {
-    return getObjectStream(factory.createParser(content));
-  }
-
-  public Stream<Entry<String, Object>> getObjectStream(URL url)
-      throws
-        IOException
-  {
-    return getObjectStream(factory.createParser(url));
-  }
-
-  public Stream<Entry<String, Object>> getObjectStream(byte[] data)
-      throws
-        IOException
-  {
-    return getObjectStream(factory.createParser(data));
-  }
-
-  public Stream<Entry<String, Object>> getObjectStream(char[] content)
-      throws
-        IOException
-  {
-    return getObjectStream(factory.createParser(content));
-  }
-
-  public Stream<Entry<String, Object>> getObjectStream(byte[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getObjectStream(factory.createParser(data, offset, len));
-  }
-
-  public Stream<Entry<String, Object>> getObjectStream(char[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getObjectStream(factory.createParser(data, offset, len));
-  }
-
-  public Iterator<Entry<String, Object>> getObjectIterator(File file)
-      throws
-        IOException
-  {
-    return getObjectIterator(factory.createParser(file));
-  }
-
-  public Iterator<Entry<String, Object>> getObjectIterator(InputStream is)
-      throws
-        IOException
-  {
-    return getObjectIterator(factory.createParser(is));
-  }
-
-  public Iterator<Entry<String, Object>> getObjectIterator(Reader r)
-      throws
-        IOException
-  {
-    return getObjectIterator(factory.createParser(r));
-  }
-
-  public Iterator<Entry<String, Object>> getObjectIterator(String content)
-      throws
-        IOException
-  {
-    return getObjectIterator(factory.createParser(content));
-  }
-
-  public Iterator<Entry<String, Object>> getObjectIterator(URL url)
-      throws
-        IOException
-  {
-    return getObjectIterator(factory.createParser(url));
-  }
-
-  public Iterator<Entry<String, Object>> getObjectIterator(byte[] data)
-      throws
-        IOException
-  {
-    return getObjectIterator(factory.createParser(data));
-  }
-
-  public Iterator<Entry<String, Object>> getObjectIterator(char[] content)
-      throws
-        IOException
-  {
-    return getObjectIterator(factory.createParser(content));
-  }
-
-  public Iterator<Entry<String, Object>> getObjectIterator(byte[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getObjectIterator(factory.createParser(data, offset, len));
-  }
-
-  public Iterator<Entry<String, Object>> getObjectIterator(char[] data, int offset, int len)
-      throws
-        IOException
-  {
-    return getObjectIterator(factory.createParser(data, offset, len));
-  }
-
-
   public static Spliterator<Object> getArraySpliterator(final JsonParser parser)
       throws
         IOException
@@ -435,10 +39,7 @@ public class SimpleMapper
     JsonToken token = parser.nextToken();
 
     if (token == null)
-    {
-      LOG.warn("empty input");
-      return Spliterators.emptySpliterator();
-    }
+      return null;
 
     if (!JsonToken.START_ARRAY.equals(token))
       fail(parser, "The root-element must be an array!");
@@ -511,14 +112,7 @@ public class SimpleMapper
         if (next != null)
           return true;
 
-        return spliterator.tryAdvance(new Consumer<Object>()
-        {
-          @Override
-          public void accept(Object o)
-          {
-            next = o;
-          }
-        });
+        return spliterator.tryAdvance((Object o) -> { next = o; });
       }
 
       @Override
@@ -541,10 +135,7 @@ public class SimpleMapper
     JsonToken token = parser.nextToken();
 
     if (token == null)
-    {
-      LOG.warn("empty input");
-      return Spliterators.emptySpliterator();
-    }
+      return null;
 
     if (!JsonToken.START_OBJECT.equals(token))
       fail(parser, "The root-element must be an object!");
@@ -643,14 +234,7 @@ public class SimpleMapper
         if (next != null)
           return true;
 
-        return spliterator.tryAdvance(new Consumer<Entry<String, Object>>()
-        {
-          @Override
-          public void accept(Entry<String, Object> e)
-          {
-            next = e;
-          }
-        });
+        return spliterator.tryAdvance((Entry<String, Object> e) -> { next = e; });
       }
 
       @Override
@@ -666,163 +250,12 @@ public class SimpleMapper
   }
 
 
-  public List<Object> convertArray(File file) throws Exception
-  {
-    return convertArray(factory.createParser(file));
-  }
-
-  public List<Object> convertArray(InputStream is) throws Exception
-  {
-    return convertArray(factory.createParser(is));
-  }
-
-  public List<Object> convertArray(Reader r) throws Exception
-  {
-    return convertArray(factory.createParser(r));
-  }
-
-  public List<Object> convertArray(String content) throws Exception
-  {
-    return convertArray(factory.createParser(content));
-  }
-
-  public List<Object> convertArray(URL url) throws Exception
-  {
-    return convertArray(factory.createParser(url));
-  }
-
-  public List<Object> convertArray(byte[] data) throws Exception
-  {
-    return convertArray(factory.createParser(data));
-  }
-
-  public List<Object> convertArray(char[] content) throws Exception
-  {
-    return convertArray(factory.createParser(content));
-  }
-
-  public List<Object> convertArray(byte[] data, int offset, int len)
-      throws
-        Exception
-  {
-    return convertArray(factory.createParser(data, offset, len));
-  }
-
-  public List<Object> convertArray(char[] content, int offset, int len)
-      throws
-        Exception
-  {
-    return convertArray(factory.createParser(content, offset, len));
-  }
-
-  public Map<String, Object> convertObject(File file) throws Exception
-  {
-    return convertObject(factory.createParser(file));
-  }
-
-  public Map<String, Object> convertObject(InputStream is) throws Exception
-  {
-    return convertObject(factory.createParser(is));
-  }
-
-  public Map<String, Object> convertObject(Reader r) throws Exception
-  {
-    return convertObject(factory.createParser(r));
-  }
-
-  public Map<String, Object> convertObject(String content) throws Exception
-  {
-    return convertObject(factory.createParser(content));
-  }
-
-  public Map<String, Object> convertObject(URL url) throws Exception
-  {
-    return convertObject(factory.createParser(url));
-  }
-
-  public Map<String, Object> convertObject(byte[] data) throws Exception
-  {
-    return convertObject(factory.createParser(data));
-  }
-
-  public Map<String, Object> convertObject(char[] content) throws Exception
-  {
-    return convertObject(factory.createParser(content));
-  }
-
-  public Map<String, Object> convertObject(byte[] data, int offset, int len)
-      throws
-        Exception
-  {
-    return convertObject(factory.createParser(data, offset, len));
-  }
-
-  public Map<String, Object> convertObject(char[] content, int offset, int len)
-      throws
-        Exception
-  {
-    return convertObject(factory.createParser(content, offset, len));
-  }
-
-  public Object convert(File file) throws Exception
-  {
-    return convert(factory.createParser(file));
-  }
-
-  public Object convert(InputStream is) throws Exception
-  {
-    return convert(factory.createParser(is));
-  }
-
-  public Object convert(Reader r) throws Exception
-  {
-    return convert(factory.createParser(r));
-  }
-
-  public Object convert(String content) throws Exception
-  {
-    return convert(factory.createParser(content));
-  }
-
-  public Object convert(URL url) throws Exception
-  {
-    return convert(factory.createParser(url));
-  }
-
-  public Object convert(byte[] data) throws Exception
-  {
-    return convert(factory.createParser(data));
-  }
-
-  public Object convert(char[] content) throws Exception
-  {
-    return convert(factory.createParser(content));
-  }
-
-  public Object convert(byte[] data, int offset, int len)
-      throws
-        Exception
-  {
-    return convert(factory.createParser(data, offset, len));
-  }
-
-  public Object convert(char[] content, int offset, int len)
-      throws
-        Exception
-  {
-    return convert(factory.createParser(content, offset, len));
-  }
-
-
-  static List<Object> convertArray(JsonParser parser) throws IOException
+  public static List<Object> convertArray(JsonParser parser) throws IOException
   {
     JsonToken token = parser.nextToken();
 
     if (token == null)
-    {
-      LOG.warn("empty input");
-      return Collections.EMPTY_LIST;
-    }
+      return null;
 
     if (!JsonToken.START_ARRAY.equals(token))
       fail(parser, "The root-element must be an array!");
@@ -835,15 +268,12 @@ public class SimpleMapper
     return array;
   }
 
-  static Map<String, Object> convertObject(JsonParser parser) throws IOException
+  public static Map<String, Object> convertObject(JsonParser parser) throws IOException
   {
     JsonToken token = parser.nextToken();
 
     if (token == null)
-    {
-      LOG.warn("empty input");
-      return Collections.EMPTY_MAP;
-    }
+      return null;
 
     if (!JsonToken.START_OBJECT.equals(token))
       fail(parser, "The root-element must be an object!");
@@ -856,15 +286,12 @@ public class SimpleMapper
     return object;
   }
 
-  static Object convert(JsonParser parser) throws IOException
+  public static Object convert(JsonParser parser) throws IOException
   {
     JsonToken token = parser.nextToken();
 
     if (token == null)
-    {
-      LOG.warn("empty input");
       return null;
-    }
 
     switch (token)
     {
@@ -888,7 +315,10 @@ public class SimpleMapper
   {
     JsonToken token = parser.getCurrentToken();
     if (token == null)
+    {
       fail(parser, "unexpected EOF");
+      return null; // << Will never be reached, because fail always throws an exception
+    }
 
     switch (token)
     {
@@ -902,7 +332,7 @@ public class SimpleMapper
       case VALUE_NULL:         return null;
     }
 
-    fail(parser, "unexpected token " + token.toString());
+    fail(parser, "unexpected token " + token);
     return null; // << Will never be reached, because fail always throws an exception
   }