簡體   English   中英

從 jaxb xjc 生成遷移到 jakarta 和 Java 17

[英]Migrating from jaxb xjc generation to jakarta and Java 17

我們正在調查我們的應用程序從 JDK8 到 JDK17 的遷移。 我們的一些模塊使用基於 wsdl 的 Web 服務,其他一些使用 .xsd 模式等。無論如何,我們使用 JAXWS 和 JAXB apis,它們從 JDK 11 版本開始移除並移至雅加達。

我已成功開始使用 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>

使用 jaxb 版本2.2.11xjc 生成器會生成一個名為ForkStep的類,我猜測是基於jxb:class元素。 另一方面,jakarta 3.0.1生成器生成一個名為ForkStepType的類,我猜它來自xsd:complexType元素。

這是預期的行為嗎? 在解釋規范時,舊的實現是否不正確,或者是否存在我應該注意的標志/規范目標版本以便正確重現我們應用程序的現有行為?

問題來自忘記將 jaxb 架構升級到 jakarta uri 和 3.0 版。

具體來說

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    jxb:version="1.0"

必須改為

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="https://jakarta.ee/xml/ns/jaxb"
    jxb:version="3.0"

作為參考,也必須對 .wsdl 文件進行類似的更改,例如xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"xmlns:jaxws="https://jakarta.ee/xml/ns/jaxws"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM