code: @Nonnull
    public static ESuccess parseJson (@Nonnull @WillClose final Reader aReader,
                                      @Nonnull final IJsonParserHandler aParserHandler,
                                      @Nullable final IJsonParserCustomizeCallback aCustomizeCallback,
                                      @Nullable final IJsonParseExceptionCallback aCustomExceptionCallback)
    {
      ValueEnforcer.notNull (aReader, "Reader");
      ValueEnforcer.notNull (aParserHandler, "ParserHandler");
  
      try
      {
        final JsonParser aParser = new JsonParser (aReader, aParserHandler);
        if (aCustomizeCallback != null)
          aCustomizeCallback.customizeJsonParser (aParser);
        aParser.parse ();
        return ESuccess.SUCCESS;
      }
      catch (final JsonParseException ex)
      {
        // Unrecoverable error
        if (aCustomExceptionCallback != null)
          aCustomExceptionCallback.onException (ex);
        else
          getDefaultParseExceptionCallback ().onException (ex);
        return ESuccess.FAILURE;
      }
      finally
      {
        StreamHelper.close (aReader);
      }
    }
docs: Generic JSON parse method. Usually this is not to be called manually - call
  this only when you know what you are doing :)
  
  @param aReader
  The reader to read from. Should be buffered. May not be
  <code>null</code>.
  @param aParserHandler
  The parser handler. May not be <code>null</code>.
  @param aCustomizeCallback
  An optional {@link JsonParser} customization callback. May be
  <code>null</code>.
  @param aCustomExceptionCallback
  A custom handler for unrecoverable errors. May be <code>null</code>.
  @return {@link ESuccess}