MissingReader.java

package com.fasterxml.jackson.dataformat.avro.deser;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonToken;

/**
 * Bogus {@link AvroReadContext} implementation used in two cases:
 *<ol>
 * <li>Parser has not yet been configured by an Avro Schema
 *  </li>
 * <li>Parser has been closed (explicitly or implicitly)
 *  </li>
 *</ol>
 * In former case, attempts to read will result in a {@link JsonParseException};
 * in latter case, results will simply indicate unavailability of content
 * (return `null` in most cases)
 */
public class MissingReader extends AvroReadContext
{
    public final static MissingReader instance = new MissingReader(false);

    public final static MissingReader closedInstance = new MissingReader(true);

    protected final boolean _schemaSet;

    @Deprecated // since 2.9; don't use constructors directly
    public MissingReader() {
        this(true);
    }

    protected MissingReader(boolean schemaSet) {
        super(null, null);
        _type = TYPE_ROOT;
        _schemaSet = schemaSet;
    }

    @Override
    public JsonToken nextToken() throws IOException {
        _checkSchemaSet();
        return null;
    }

    @Override
    public JsonToken getCurrentToken() {
        return null;
    }

    @Override
    public void appendDesc(StringBuilder sb) {
        sb.append("?");
    }

    @Override
    public String nextFieldName() throws IOException {
        _checkSchemaSet();
        return null;
    }

    @Override
    public void skipValue(AvroParserImpl parser) throws IOException {
        _checkSchemaSet();
    }

    protected void _checkSchemaSet() throws IOException {
        if (!_schemaSet) {
            throw new JsonParseException(null, "No AvroSchema set, can not parse");
        }
    }
}