JAXB生成的抽象类不是抽象的

发布于 2024-12-12 08:29:03 字数 429 浏览 0 评论 0原文

我使用此模式通过 JAXB 生成 java 类。但是,生成的类不是抽象的。此外,当我包含实现类的绑定时,我无法声明该类抽象,因为对象工厂需要创建一个实例。我不完全理解这一点。有人可以帮忙吗?谢谢 !

<xs:complexType name="AbstractClass" abstract="true">
    <xs:complexContent>
        <xs:extension base="someModel:BaseClass">
            <xs:sequence>

            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

I use this schema to generate a java class through JAXB. However, the generated class is not abstract. Also when I include a binding for an implementation class, I am unable to declare that class abstract since Object Factory needs to create an instance. I don't fully understand this. Could anybody help? Thanks !

<xs:complexType name="AbstractClass" abstract="true">
    <xs:complexContent>
        <xs:extension base="someModel:BaseClass">
            <xs:sequence>

            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风蛊 2024-12-19 08:29:03

IIRC 摘要只是说通常你不会实例化这个类,它应该仅用于扩展。所以抽象检查由JAXB决定,与语言级抽象类无关

IIRC abstract just says that normaly you won't instantiate this class and it should be used for extension only. So abstract check is up to JAXB and has nothing to do with language-level abstract classes

三生殊途 2024-12-19 08:29:03

您应该看到为抽象复杂类型创建的抽象类(请参见下面的示例)。您能否提供有关 XML 架构的更多详细信息?

inheritance.xsd

contactInfo 是一个抽象的复杂类型。

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:complexType name="contactInfo" abstract="true">
        <xs:sequence/>
    </xs:complexType>

    <xs:complexType name="phoneNumber">
        <xs:complexContent>
            <xs:extension base="contactInfo">
                <xs:sequence/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

XJC 调用

xjc -d out inheritance.xsd

ContactInfo

生成的 ConactInfo 类是抽象的:

package generated;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "contactInfo")
@XmlSeeAlso({
    PhoneNumber.class
})
public abstract class ContactInfo {


}

You should see an abstract class created for abstract complex types (see example below). Can you provide more details about your XML schema?

inheritance.xsd

contactInfo is an abstract complex type.

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:complexType name="contactInfo" abstract="true">
        <xs:sequence/>
    </xs:complexType>

    <xs:complexType name="phoneNumber">
        <xs:complexContent>
            <xs:extension base="contactInfo">
                <xs:sequence/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

XJC Call

xjc -d out inheritance.xsd

ContactInfo

The generated ConactInfo class is abstract:

package generated;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "contactInfo")
@XmlSeeAlso({
    PhoneNumber.class
})
public abstract class ContactInfo {


}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文