【发布时间】:2020-12-22 17:49:50
【问题描述】:
我正在尝试解组一个我没有完整定义的复杂有效负载(只是包装器,然后它将实际变化的内容定义为
@XmlAnyElement(lax = true)
protected Object any;
现在,我以前在另一个项目中做过这个,它工作得很好,分两步解组 - 首先做包装器,然后以 Node 访问 any 并将其解组到预期的内容(对于我没有 xsd,我不得不手动建模成类)
然而,这一次,内容以命名空间返回,我让它工作的唯一方法是在我自己的所有建模结构中为每个 XmlRootElement、XmlElement 和 XmlType 添加命名空间。显然这是一个巨大的痛苦,我尝试将 XmlSchema 添加到包含映射 Xml 有效负载的域对象的包中,但由于某种原因,解组器没有拾取。
@javax.xml.bind.annotation.XmlSchema(namespace = "http://mynamespace.com",
elementFormDefault = XmlNsForm.QUALIFIED)
package com.myproject.schema;
我尝试过以多种方式创建解组器,但没有一个选择包中的 XmlSchema
val marshaller = Jaxb2Marshaller()
marshaller.setPackagesToScan("supplier.package", "com.myproject.schema")
或
val unmarshaller = JAXBContext.newInstance(myKClass.java).createUnmarshaller()
我的(相关)依赖项看起来像这样
implementation("org.springframework.boot:spring-boot-starter-webflux:2.4.1")
implementation("org.springframework.ws:spring-ws-core:3.0.10.RELEASE")
implementation("javax.xml.bind:jaxb-api:2.3.1")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.10.1")
编辑: 显然,包级注释没有被读取,因为 package-info.java 文件似乎被排除在构建之外(因此它没有被类加载器拾取)。我查看了从 xjc 输出构建的类,这些类确实包含包信息。
我仍在调查为什么会发生这种情况,也许有一个 Gradle 或 Kotlin 插件的标志,我可以切换以包含它。
【问题讨论】:
标签: spring kotlin jaxb spring-ws