FasterXML/jackson-databind · error · UnsupportedOperationException

Only support `JavaType` implementation of `ResolvedType`…

Error message

Only support `JavaType` implementation of `ResolvedType`, not: {}

What it means

Thrown by DeserializationContext.readValue(JsonParser, ResolvedType) when the ResolvedType argument is not an instance of JavaType. Jackson's databind module only accepts its own JavaType implementation of the jackson-core ResolvedType interface. Other ResolvedType implementations (e.g., from a different Jackson major version or a third-party type system) are rejected.

Solutions

  1. Pass a JavaType instead of a raw ResolvedType: use ctxt.readValue(parser, ctxt.constructType(yourClass)) or TypeFactory.constructType().
  2. Check for Jackson version conflicts on the classpath: run mvn dependency:tree and ensure only one major Jackson version is present.
  3. If you have a TypeReference, use the readValue(parser, TypeReference) overload instead.

Example fix

// before
ResolvedType type = myExternalTypeSystem.resolve(MyClass.class);
ctxt.readValue(parser, type); // throws
// after
JavaType type = ctxt.getTypeFactory().constructType(MyClass.class);
ctxt.readValue(parser, type);
Defensive patterns

Strategy: type-guard

Validate before calling

// Ensure you pass JavaType, not a generic ResolvedType
if (!(type instanceof JavaType)) {
    type = mapper.constructType(type.getTypeReference()); // or rebuild
}

Type guard

boolean isJavaType(ResolvedType type) {
    return type instanceof JavaType;
}

Prevention

When it happens

Trigger: Calling ctxt.readValue(parser, someResolvedType) where someResolvedType comes from a non-Jackson source or a different Jackson version. Also possible when a custom extension of the streaming API provides its own ResolvedType that is not a JavaType.

Common situations: Mixing Jackson 2.x and 3.x jars on the classpath, causing a com.fasterxml.jackson.core.type.ResolvedType (2.x) to be passed where tools.jackson.core.type.ResolvedType (3.x) JavaType is expected. Using a custom type library that implements ResolvedType independently.

Related errors


AI-assisted analysis of FasterXML/jackson-databind@87876ca5c0 (2026-08-11). Data as JSON: /api/errors/f6054df09cdc08c6. Report an issue: GitHub.

Appendix: source

Thrown at src/main/java/tools/jackson/databind/DeserializationContext.java:393

     * rather use {@link #readPropertyValue(JsonParser, BeanProperty, Class)};
     * this method does not allow use of contextual annotations.
     */
    @Override
    public <T> T readValue(JsonParser p, Class<T> type) throws JacksonException {
        return readValue(p, getTypeFactory().constructType(type));
    }

    @Override
    public <T> T readValue(JsonParser p, TypeReference<T> refType) throws JacksonException {
        return readValue(p, getTypeFactory().constructType(refType));
    }

    @Override
    public <T> T readValue(JsonParser p, ResolvedType type) throws JacksonException {
        if (type instanceof JavaType jt) {
            return readValue(p, jt);
        }
        throw new UnsupportedOperationException(
                "Only support `JavaType` implementation of `ResolvedType`, not: "+type.getClass().getName());
    }

    @SuppressWarnings("unchecked")
    public <T> T readValue(JsonParser p, JavaType type) throws JacksonException {
        ValueDeserializer<Object> deser = findRootValueDeserializer(type);
        if (deser == null) {
            reportBadDefinition(type,
                    "Could not find `ValueDeserializer` for type "+ClassUtil.getTypeDescription(type));
        }
        return (T) _readValue(p, deser);
    }

    /**
     * Helper method that should handle special cases for deserialization; most
     * notably handling {@code null} (and possibly absent values).
     */
    private Object _readValue(JsonParser p, ValueDeserializer<Object> deser) throws JacksonException

View on GitHub (pinned to 87876ca5c0)