使用Kotlin';Vert.x服务代理中的s数据类

使用Kotlin';Vert.x服务代理中的s数据类,kotlin,vert.x,kapt,Kotlin,Vert.x,Kapt,我试图将数据类传递给Vert.x的服务代理,如下所示: 数据类实体(val字段:字符串) @促氧剂 @VertxGen 公共接口数据库服务{ DatabaseService createEntity(实体实体、处理程序resultHandler); } 但是,服务代理需要一个DataObject作为参数类型 以下是我到目前为止所做的尝试。 首先,我将数据类重写为: @DataObject 数据类实体(val字段:字符串){ 构造函数(json:JsonObject):这个( json.getS

我试图将
数据类
传递给Vert.x的服务代理,如下所示:

数据类实体(val字段:字符串)
@促氧剂
@VertxGen
公共接口数据库服务{
DatabaseService createEntity(实体实体、处理程序resultHandler);
}
但是,服务代理需要一个
DataObject
作为参数类型

以下是我到目前为止所做的尝试。 首先,我将数据类重写为:

@DataObject
数据类实体(val字段:字符串){
构造函数(json:JsonObject):这个(
json.getString(“字段”)
)
fun toJson():JsonObject=JsonObject.mapFrom(this)
}
虽然这是可行的,但代码是冗余的,因此我使用以下生成器尝试了kapt:

  override fun process(annotations: Set<TypeElement>, roundEnv: RoundEnvironment): Boolean {
    roundEnv.getElementsAnnotatedWith(ProxyDataObject::class.java).forEach { el ->
      val className = el.simpleName.toString()
      val pack = processingEnv.elementUtils.getPackageOf(el).toString()
      val filename = "Proxy$className"

      val classBuilder = TypeSpec.classBuilder(filename)
      val primaryConstructorBuilder = FunSpec.constructorBuilder()
      val secondaryConstructorBuilder = FunSpec.constructorBuilder().addParameter("json", JsonObject::class)
      val secondaryConstructorCodeBlocks = mutableListOf<CodeBlock>()
      el.enclosedElements.forEach {
        if (it.kind == ElementKind.FIELD) {
          val name = it.simpleName.toString()
          val kClass = getClass(it)              // get the corresponding Kotlin class
          val jsonTypeName = getJsonTypeName(it) // get the corresponding type name in methods of JsonObject

          classBuilder.addProperty(PropertySpec.builder(name, kClass).initializer(name).build())
          primaryConstructorBuilder.addParameter(name, kClass)
          secondaryConstructorCodeBlocks.add(CodeBlock.of("json.get$jsonTypeName(\"$name\")"))
        }
      }
      secondaryConstructorBuilder.callThisConstructor(secondaryConstructorCodeBlocks)
      classBuilder
        .addAnnotation(DataObject::class)
        .addModifiers(KModifier.DATA)
        .primaryConstructor(primaryConstructorBuilder.build())
        .addFunction(secondaryConstructorBuilder.build())
        .addFunction(
          FunSpec.builder("toJson").returns(JsonObject::class).addStatement("return JsonObject.mapFrom(this)").build()
        )
      val generatedFile = FileSpec.builder(pack, filename).addType(classBuilder.build()).build()
      generatedFile.writeTo(processingEnv.filer)
    }
    return true
  }
生成的注释
@DataObject
似乎未被处理

那我该怎么办?有更好的解决办法吗

Could not generate model for DatabaseService#createEntity(ProxyEntity,io.vertx.core.Handler<io.vertx.core.AsyncResult<java.lang.Void>>): type ProxyEntity is not legal for use for a parameter in proxy