{"record":{"id":"2064d652c34f2782","repo":"xai-org/x-algorithm","slug":"unknown-value-class-config-valuethriftclass","errorCode":null,"errorMessage":"unknown value class ${config.valueThriftClass}","messagePattern":"unknown value class (.+?)","errorType":"validation","errorClass":"ConfigFailure","httpStatus":null,"severity":"error","filePath":"botmaker/botmaker_eventbus/src/main/scala/com/twitter/botmaker/runtime/config/KafkaProducerConfigs.scala","lineNumber":58,"sourceCode":"      !Strings.isNullOrEmpty(config.topicName),\n      s\"topicName has to be configured in KafkaProducer ${config.funcName}\"\n    )\n\n    validate(\n      !Strings.isNullOrEmpty(config.dest),\n      s\"dest has to be configured in KafkaProducer ${config.funcName}\"\n    )\n\n    try {\n      val classObject = ClassCache.forName(config.valueThriftClass)\n      validate(\n        (classOf[Thrift[_, _]].isAssignableFrom(classObject)) || (classOf[String].isAssignableFrom(\n          classObject)),\n        s\"The value class ${config.valueThriftClass}, is not supported\"\n      )\n    } catch {\n      case e: UncheckedExecutionException => {\n        throw ConfigFailure(s\"unknown value class ${config.valueThriftClass}\")\n      }\n    }\n\n    validateTypeName(config.keyType)\n\n    kafkaProducers = kafkaProducers :+ config\n  }\n\n  override def debug(dbg: RuntimeDebugger): Unit = {\n    super.debug(dbg)\n\n    dbg.open(\"kafkaProducers\", kafkaProducers) foreach { d =>\n      kafkaProducers foreach { eb => d.info(eb.funcName, eb.toString) }\n    }\n  }\n\n  override def compilerBuilder[E <: ServiceContainer: ClassTag]: CompilerBuilder[E] = {\n    val builder = super.compilerBuilder[E]","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/xai-org/x-algorithm/blob/24c60942c5c5fdad3a6addffb4c6e6d2f228f04f/botmaker/botmaker_eventbus/src/main/scala/com/twitter/botmaker/runtime/config/KafkaProducerConfigs.scala#L40-L76","documentation":"ConfigFailure thrown by KafkaProducerConfigs.addKafkaProducer when class loading/validation of the value class throws an UncheckedExecutionException — i.e. the class named by config.valueThriftClass could not be loaded at all (vs. 789 where it loads but is the wrong type).","triggerScenarios":"value_thrift_class set to a class name that fails to load: typo in FQCN, missing jar dependency, wrong package, or class only present in another artifact version.","commonSituations":"Missing generated thrift-scala artifact on the classpath; renamed/moved Thrift classes between versions; fat-jar shading dropping the class.","solutions":["Verify the fully-qualified class name is correct and the containing jar is a runtime dependency","Add the missing thrift-scala artifact to the botmaker_eventbus deployment","After fixing, if a different error appears (789), the class loads but is not Thrift/String — replace it"],"exampleFix":"# before\nvalue_thrift_class: \"com.acme.thriftscala.MissingEvent\"\n# after (add dep + correct name)\nvalue_thrift_class: \"com.acme.events.thriftscala.MissingEvent\"","handlingStrategy":"validation","validationCode":"try ClassCache.forName(config.valueThriftClass)\ncatch { case e: Exception => throw new ConfigFailure(s\"cannot load ${config.valueThriftClass}\") }","typeGuard":null,"tryCatchPattern":"catch { case e: ConfigFailure => log classpath and dependency tree (sbt evicted/coursier) }","preventionTips":["Pin thrift artifact versions explicitly","Add a classpath-verification check to deploy scripts"],"tags":["kafka","thrift","classloading","scala"],"backgroundTag":"class-not-found-config","analyzedSha":"24c60942c5c5fdad3a6addffb4c6e6d2f228f04f","analyzedAt":"2026-08-28T11:40:14.686Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}