【问题标题】:JAXB generated classes: Ignore intermediate classesJAXB 生成的类:忽略中间类
【发布时间】:2012-01-04 14:51:56
【问题描述】:

这是我的 XML 模式的摘录:

<xsd:complexType name="MyType">
    <xsd:sequence>
        <xsd:element name="Numbers">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="Number" minOccurs="1" maxOccurs="5" type="xsd:decimal"/>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>

JAXB 为我生成以下类:

public class MyType {
    protected MyType.Numbers numbers;

    public static class Numbers {
        protected List<BigDecimal> number;
    }
}

但我想忽略这个中间类并有类似的东西:

public class MyType {
    protected List<BigDecimal> number;
}

这有可能吗?

【问题讨论】:

    标签: jaxb


    【解决方案1】:

    是的,只有借助外部插件才能使用 JAXB,因为这种修改实际上是模型的更改。看看@XmlElementWrapper plugin

    注意:这个论坛已经提出了同样的问题(How generate XMLElementWrapper annotationDealing with JAXB CollectionsJAXB List Tag creating inner class)。请先使用搜索。

    【讨论】:

    • 谢谢。但这对我不起作用。 numbers 现在是预期的列表。但是 getter 看起来像这样:public Numbers getNumbers{ return numbers; } 所以生成的类不会编译...
    • 插件中可能存在错误 :( 抱歉,我对此无能为力,因为我不拥有该插件。请在您的问题中发布生成的代码:至少它将帮助遇到同样问题的其他人。
    • 问题是我的一些 XML 元素的名称中包含下划线。例如。 last_name。由于某些原因,我不得不启用underscoreBinding="asCharInWord"。结果是变量被命名为lastName,getter 被命名为getLast_name。因此插件无法将变量与其 getter 和 setter 方法匹配。
    • 对你有帮助。如果您可以发布错误代码+ XSD,我将不胜感激。
    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多