nathanmarz/storm · error · IllegalArgumentException

does not exist

Error message

${field} does not exist

What it means

Thrown by Fields.fieldIndex(String) when the requested field name is not present in this Fields object's declared output/declare fields. It fires whenever tuple component code (e.g. emit anchoring, grouping, or projection) looks up a positional index for a field name that was never declared, meaning the caller and the declared stream schema are out of sync.

Solutions

  1. Check that the field name passed to fieldIndex is spelled exactly as declared in the stream's Fields declaration (case-sensitive).
  2. Verify the component is operating on the correct stream; each stream has its own declared fields.
  3. If the field was recently added or renamed, update both the topology declaration and all consumers that look it up.
  4. Guard lookups with Fields.contains(field) (or select()) before calling fieldIndex when the field may legitimately be absent.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at storm-core/src/jvm/backtype/storm/tuple/Fields.java:78 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of nathanmarz/storm@cdb116e942 (2026-09-12). Data as JSON: /api/errors/3123f5c49c371d2b. Report an issue: GitHub.

Appendix: source

Thrown at storm-core/src/jvm/backtype/storm/tuple/Fields.java:78

    public int size() {
        return _fields.size();
    }

    public String get(int index) {
        return _fields.get(index);
    }

    public Iterator<String> iterator() {
        return _fields.iterator();
    }
    
    /**
     * Returns the position of the specified field.
     */
    public int fieldIndex(String field) {
        Integer ret = _index.get(field);
        if(ret==null) {
            throw new IllegalArgumentException(field + " does not exist");
        }
        return ret;
    }
    
    /**
     * Returns true if this contains the specified name of the field.
     */
    public boolean contains(String field) {
        return _index.containsKey(field);
    }
    
    private void index() {
        for(int i=0; i<_fields.size(); i++) {
            _index.put(_fields.get(i), i);
        }
    }

    @Override

View on GitHub (pinned to cdb116e942)