【发布时间】:2021-12-19 18:13:01
【问题描述】:
我们正在调查我们的应用程序从 JDK8 到 JDK17 的迁移。我们的一些模块使用基于 wsdl 的 Web 服务,其他一些使用 .xsd 模式等。无论如何,我们使用 JAXWS 和 JAXB API,这些 API 从 JDK 版本 11 开始已从版本 11 中删除并移至 Jakarta。
我已成功开始使用 jakarta 依赖项从 .wsdl 和 .xsd 文件生成源代码,并且使用 jakarta 导入正确生成了源代码
import jakarta.xml.bind.JAXBElement;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElementRef;
而以前它使用javax.xml.bind. 的东西,这在编译时不再可用。我的问题是,虽然我已经成功生成了基于模式的源,但新的生成器会生成不同的代码(类名、访问器等),我想在继续重构之前确认这是预期的行为。
例子:
我们的 .xsd 包含以下内容:
<xsd:complexType name="ForkStepType">
<xsd:annotation>
<xsd:appinfo>
<jxb:class name="ForkStep"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexContent>
<xsd:extension base="tns:LinearStepType">
<xsd:sequence/>
<xsd:attribute name="forkLevel" type="tns:ForkLevelType" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
old xjc 生成器使用 jaxb 版本 2.2.11 会生成一个名为 ForkStep 的类,我猜测是基于 jxb:class 元素。另一方面,jakarta 3.0.1 生成器生成一个名为 ForkStepType 的类,我猜它来自 xsd:complexType 元素。
这是预期的行为吗?在解释规范时,旧实现是否不正确,或者是否存在我应该注意的标志/规范目标版本,以便正确重现我们应用的现有行为?
【问题讨论】:
标签: java jakarta-ee xsd java-11