Kotlin中JAXB反序列化报错:缺少ObjectFactory.class或jaxb.index
检查编译与类路径
你用xjc生成的ObjectFactory.java、package-info.java等源文件必须被正确编译成.class文件,而且这些.class文件得在项目的类路径里。Kotlin项目里,编译后的class文件默认在build/classes/java/main(Gradle)或target/classes(Maven)目录,要确认org/inek/xml/schema/standortverzeichnis这个包路径下,不仅有Java源文件,还要有对应的.class文件。另外要确保IDE或构建工具把这些Java文件纳入了编译范围,别只编译Kotlin文件。换个JAXBContext初始化方式
别用包名初始化,直接指定具体类更靠谱,能绕开包扫描的问题:val jaxbContext = JAXBContext.newInstance(Standortverzeichnis::class.java, ObjectFactory::class.java) val unmarshaller = jaxbContext.createUnmarshaller()补全jaxb.index(如果坚持用包名)
要是非得用包名初始化JAXBContext,就得在org.inek.xml.schema.standortverzeichnis包下建一个jaxb.index文件,把该包下所有JAXB映射类的类名逐行写进去,比如:Standortverzeichnis // 其他需要的映射类名同时得保证编译后的包目录里确实有ObjectFactory.class文件。
检查构建工具配置
用Gradle的话,得在build.gradle.kts里加上Java编译支持,毕竟xjc生成的是Java文件:plugins { kotlin("jvm") version "你的Kotlin版本号" java }另外要把生成的Java源文件放在
src/main/java目录,或者通过sourceSets配置把生成目录加到源路径里,这样构建工具才会自动编译这些文件。
内容的提问来源于stack exchange,提问作者Pferdesalbe

