我在运行时使用Javassist创建了一个POJO类。我正在尝试使用我创建的POJO将XML文件转换为Java对象,使用Jackson Mapper,如下所示,
//test.proper.MyRuntimeClass is the Pojo I created using javassist.
CtClass ctClass = classPool.getCtClass("test.proper.MyRuntimeClass");
mapper.readValue(<InputStream>, Class.forName(ctClass.getName()));
我能够解析XML文件,但是,我无法将类型myruntimeclass的变量分配给上线。
我想要这样的东西。
test.proper.MyRuntimeClass myClass = mapper.readValue(<InputStream>, Class.forName(ctClass.getName()));
请让我知道实现这一目标的正确方法。预先感谢。
您不能在"常规" Java代码中使用类。您需要编译"常规" Java代码,以要编译一个编译器需要其使用的类的所有字体。
但是您可以解决:
- 创建Javassist生成类实施的接口,并将该类型用于变量" myclass"
- 生成使用Myruntimeclass与Javasisst的代码
- 将对象用作" myclass"的类型和反射以访问其上的方法/属性。
我认为创建界面是最容易写/理解/维护方法
您需要首先将CTClass转换为类。然后将其传递给映射器,为班级。
Class MyRuntimeClass = ctClass.toClass();
mapper.readValue(<InputStream>, MyRuntimeClass);
更多细节在这里 - 为什么在用Javassist更改方法主体后,我必须致电.toclass()?