{"record":{"id":"30e29f6e43564ad2","repo":"bumptech/glide","slug":"failed-to-find-source-encoder-for-data-class-dat","errorCode":null,"errorMessage":"Failed to find source encoder for data class: {dataClass}","messagePattern":"Failed to find source encoder for data class: (.+?)","errorType":"exception","errorClass":"NoSourceEncoderAvailableException","httpStatus":null,"severity":"error","filePath":"library/src/main/java/com/bumptech/glide/Registry.java","lineNumber":585,"sourceCode":"\n  @NonNull\n  public <X> ResourceEncoder<X> getResultEncoder(@NonNull Resource<X> resource)\n      throws NoResultEncoderAvailableException {\n    ResourceEncoder<X> resourceEncoder = resourceEncoderRegistry.get(resource.getResourceClass());\n    if (resourceEncoder != null) {\n      return resourceEncoder;\n    }\n    throw new NoResultEncoderAvailableException(resource.getResourceClass());\n  }\n\n  @NonNull\n  @SuppressWarnings(\"unchecked\")\n  public <X> Encoder<X> getSourceEncoder(@NonNull X data) throws NoSourceEncoderAvailableException {\n    Encoder<X> encoder = encoderRegistry.getEncoder((Class<X>) data.getClass());\n    if (encoder != null) {\n      return encoder;\n    }\n    throw new NoSourceEncoderAvailableException(data.getClass());\n  }\n\n  @NonNull\n  public <X> DataRewinder<X> getRewinder(@NonNull X data) {\n    return dataRewinderRegistry.build(data);\n  }\n\n  @NonNull\n  public <Model> List<ModelLoader<Model, ?>> getModelLoaders(@NonNull Model model) {\n    return modelLoaderRegistry.getModelLoaders(model);\n  }\n\n  @NonNull\n  public List<ImageHeaderParser> getImageHeaderParsers() {\n    List<ImageHeaderParser> result = imageHeaderParserRegistry.getParsers();\n    if (result.isEmpty()) {\n      throw new NoImageHeaderParserException();\n    }","sourceCodeStart":567,"sourceCodeEnd":603,"githubUrl":"https://github.com/bumptech/glide/blob/eb14a895d8f866e6a08c3e19d50ea3bd2c12c20a/library/src/main/java/com/bumptech/glide/Registry.java#L567-L603","documentation":"Thrown (as NoSourceEncoderAvailableException) by Registry.getSourceEncoder() when no Encoder is registered for the given data's class. Glide needs a source encoder to write the original/decoded data (before transformation) to the disk cache; without one it cannot cache that data type.","triggerScenarios":"getSourceEncoder(data) looks up encoderRegistry.getEncoder(data.getClass()); if null, NoSourceEncoderAvailableException is thrown with the data class name.","commonSituations":"Using DiskCacheStrategy.DATA/ALL with a custom data source type for which no Encoder is registered; a custom ModelLoader producing an unusual data type; loading from a model whose decoded data type lacks an encoder.","solutions":["Register an Encoder for your data class in Registry via registry.append(...).","Switch to DiskCacheStrategy.NONE (or RESOURCE if a result encoder exists) to avoid requiring a source encoder.","Ensure the data type returned by your ModelLoader/DataFetcher has a matching Encoder registration.","Verify you append both a ModelLoader/decoder and an Encoder for any fully new data type."],"exampleFix":"// before\n// custom data type 'MyData' has no source encoder -> NoSourceEncoderAvailableException\nGlide.with(view).load(model).diskCacheStrategy(DiskCacheStrategy.DATA).into(view)\n\n// after (option A)\nregistry.append(MyData::class.java, MyDataEncoder())\n// after (option B)\nGlide.with(view).load(model).diskCacheStrategy(DiskCacheStrategy.NONE).into(view)","handlingStrategy":"try-catch","validationCode":"// If you cache source data, ensure an Encoder exists for its type.\n// Option: register an Encoder for MyData in Registry, or avoid DiskCacheStrategy.DATA.\nGlide.with(view)\n  .load(model)\n  .diskCacheStrategy(DiskCacheStrategy.NONE) // when no source encoder is registered\n  .into(view)","typeGuard":null,"tryCatchPattern":"try {\n  glide.registry.getSourceEncoder(data)\n} catch (e: NoSourceEncoderAvailableException) {\n  // register Encoder<MyData> or use DiskCacheStrategy.NONE\n}","preventionTips":["Register an Encoder for each custom data type you intend to cache.","Use DiskCacheStrategy.NONE when no source encoder is available.","Ensure ModelLoader/DataFetcher data types have matching Encoders."],"tags":["glide-core","registry","encoder","disk-cache","custom-data","runtime"],"backgroundTag":null,"analyzedSha":"eb14a895d8f866e6a08c3e19d50ea3bd2c12c20a","analyzedAt":"2026-08-14T01:43:54.821Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}