Kon*_*ine 18 java xsd java-platform-module-system jakarta-ee java-17
我们正在研究将应用程序从 JDK8 迁移到 JDK17。我们的一些模块使用基于 wsdl 的 Web 服务,其他一些模块使用 .xsd 模式等。无论如何,我们使用 JAXWS 和 JAXB api,这些 API 现在已从 JDK 版本 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;
Run Code Online (Sandbox Code Playgroud)
而以前它使用的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>
Run Code Online (Sandbox Code Playgroud)
使用 jaxb 版本的旧xjc生成器2.2.11将生成一个名为 的类ForkStep,我根据该jxb:class元素猜测。3.0.1另一方面,雅加达生成器生成一个名为ForkStepType我猜测来自xsd:complexType元素的类。
这是预期的行为吗?在解释规范时,旧的实现是否不正确,或者是否存在我应该注意的标志/规范目标版本,以便正确地重现我们应用程序的现有行为?
Kon*_*ine 22
问题来自于忘记将 jaxb 架构升级到 jakarta uri 和版本 3.0。
\n具体来说
\n<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"\n xmlns:jxb="http://java.sun.com/xml/ns/jaxb"\n jxb:version="1.0"\nRun Code Online (Sandbox Code Playgroud)\n必须改为
\n<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"\n xmlns:jxb="https://jakarta.ee/xml/ns/jaxb"\n jxb:version="3.0"\nRun Code Online (Sandbox Code Playgroud)\n作为参考,也必须对 .wsdl 文件进行类似的更改,例如xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"\xe2\x86\x92xmlns:jaxws="https://jakarta.ee/xml/ns/jaxws"
| 归档时间: |
|
| 查看次数: |
40118 次 |
| 最近记录: |