{"record":{"id":"7c8f2b5583cb6a99","repo":"apache/druid","slug":"unknown-type-for-input-s","errorCode":null,"errorMessage":"Unknown type for input[%s]","messagePattern":"Unknown type for input\\[(.+?)\\]","errorType":"exception","errorClass":"IAE","httpStatus":null,"severity":"error","filePath":"processing/src/main/java/org/apache/druid/query/topn/TopNResultValue.java","lineNumber":56,"sourceCode":"{\n  private final List<DimensionAndMetricValueExtractor> valueList;\n\n  @JsonCreator\n  public static TopNResultValue create(List<?> value)\n  {\n    if (value == null) {\n      return new TopNResultValue(new ArrayList<>());\n    }\n\n    return new TopNResultValue(Lists.transform(\n        value,\n        (Function<Object, DimensionAndMetricValueExtractor>) input -> {\n          if (input instanceof Map) {\n            return new DimensionAndMetricValueExtractor((Map) input);\n          } else if (input instanceof DimensionAndMetricValueExtractor) {\n            return (DimensionAndMetricValueExtractor) input;\n          } else {\n            throw new IAE(\"Unknown type for input[%s]\", input.getClass());\n          }\n        }\n    ));\n  }\n\n  public TopNResultValue(List<DimensionAndMetricValueExtractor> valueList)\n  {\n    this.valueList = valueList;\n  }\n\n  @JsonValue\n  public List<DimensionAndMetricValueExtractor> getValue()\n  {\n    return valueList;\n  }\n\n  @Override\n  public Iterator<DimensionAndMetricValueExtractor> iterator()","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/apache/druid/blob/9b90983fd291f26935af934383ce360473179e4d/processing/src/main/java/org/apache/druid/query/topn/TopNResultValue.java#L38-L74","documentation":"TopNResultValue.fromObject builds a Function that converts each row of a topN result into a DimensionAndMetricValueExtractor. Each row must be either a Map or already a DimensionAndMetricValueExtractor; anything else (e.g. a List, String, or custom POJO) triggers this IllegalArgumentException.","triggerScenarios":"Calling TopNResultValue.fromObject with a List whose elements are neither Map nor DimensionAndMetricValueExtractor — e.g. feeding raw arrays, JSON-decoded lists, or custom result objects into the topN result post-processing path; custom query tool chests or federation code that reshapes topN rows incorrectly.","commonSituations":"Custom query runners emitting topN rows as Java beans or JSON arrays; downstream extension code (e.g. custom federation or rewrite layers) that mangles row structure; deserialization producing List<List<Object>> instead of List<Map<String,Object>>.","solutions":["Convert each result row to a Map<String,Object> (e.g. with an object mapper's convertValue(row, Map.class)) before passing to TopNResultValue.fromObject","If you already have extractors, wrap them in DimensionAndMetricValueExtractor directly","Check custom code that reshapes topN results and make it emit maps keyed by dimension/metric names"],"exampleFix":"// before\nList<Object> rows = Arrays.asList(Arrays.asList(\"dim\", 42));\nTopNResultValue value = TopNResultValue.fromObject(rows);\n// after\nList<Object> rows = Arrays.asList(ImmutableMap.of(\"dimension\", \"dim\", \"metric\", 42));\nTopNResultValue value = TopNResultValue.fromObject(rows);","handlingStrategy":"validation","validationCode":"for (Object row : rows) {\n  if (!(row instanceof Map || row instanceof DimensionAndMetricValueExtractor)) {\n    throw new IllegalArgumentException(\"topN row must be a Map or DimensionAndMetricValueExtractor: \" + row.getClass());\n  }\n}","typeGuard":"static boolean isValidTopNRow(Object row) {\n  return row instanceof Map || row instanceof DimensionAndMetricValueExtractor;\n}","tryCatchPattern":"try {\n  TopNResultValue value = TopNResultValue.fromObject(rows);\n} catch (IllegalArgumentException e) {\n  if (e.getMessage().startsWith(\"Unknown type for input\")) {\n    rows = rows.stream().map(r -> objectMapper.convertValue(r, Map.class)).collect(Collectors.toList());\n    value = TopNResultValue.fromObject(rows);\n  } else {\n    throw e;\n  }\n}","preventionTips":["Emit topN result rows as Map<String,Object> keyed by dimension and metric names","Never pass raw arrays or POJOs into TopNResultValue.fromObject","Unit-test custom result-reshaping code against TopNResultValue.fromObject"],"tags":["druid","type-mismatch","result-processing"],"backgroundTag":"type-mismatch","analyzedSha":"9b90983fd291f26935af934383ce360473179e4d","analyzedAt":"2026-09-07T13:32:30.957Z","contentChangedAt":"2026-09-07T13:32:30.957Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}