class JacksonStreamParser implements Parser {
    @Override
    public void parse(char[] data, Document document) throws Exception {<FILL_FUNCTION_BODY>}
  }

      JsonFactory jsonFactory =
          new JsonFactoryBuilder()
              .configure(JsonFactory.Feature.CANONICALIZE_FIELD_NAMES, false)
              .build();
      com.fasterxml.jackson.core.JsonParser jp =
          jsonFactory.createParser(new CharArrayReader(data));
      int depth = 0;
      do {
        JsonToken token = jp.nextToken();
        switch (token) {
          case START_OBJECT:
          case START_ARRAY:
            depth++;
            break;
          case END_OBJECT:
          case END_ARRAY:
            depth--;
            break;
          case FIELD_NAME:
            jp.currentName();
            break;
          case VALUE_STRING:
            jp.getText();
            break;
          case VALUE_NUMBER_INT:
          case VALUE_NUMBER_FLOAT:
            jp.getLongValue();
            break;
          case VALUE_TRUE:
          case VALUE_FALSE:
            jp.getBooleanValue();
            break;
          case VALUE_NULL:
            // Do nothing; nextToken() will advance in stream
            break;
          default:
            throw new IllegalArgumentException("Unexpected token " + token);
        }
      } while (depth > 0);
      jp.close();
    
<no_super_class>