gpt4 book ai didi

java - JAXB classImpl 绑定(bind)(使用扩展生成的 impl 的特定 impl)但 getter 返回父类(super class)型

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:36 28 4
gpt4 key购买 nike

包装一些生成的类,我使用 classImpl 绑定(bind),但生成的类中的集合返回生成的类型而不是 classImpl 中的类型,我当然想要一个 classImpl 列表......

我的 xsd:

<complexType name="A">
<xs:sequence>
<element name="listB" type="sbs:B" minOccurs="0" maxOccurs="unbounded"></element>
<element name="singleB" type="sbs:B" minOccurs="1" maxOccurs="1"></element>
</xs:sequence>
</complexType>
<complexType name="B">
<xs:annotation><xs:appinfo>
<jxb:class implClass="BWrapper" />
</xs:appinfo></xs:annotation>
</complexType>

生成的类是:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "A", propOrder = {
"listB",
"singleB"
})
public class A {
@XmlElement(type = BWrapper.class)
protected List<B> listB;
@XmlElement(required = true, type = BWrapper.class)
protected BWrapper singleB;

正如预期的那样,singleB 的类型是 BWrapper,因此,为什么 listB 是 B 的列表而不是 BWrapper 的列表???

提前感谢您的帮助!!

最佳答案

您已定义类型 可以由BWrapper 实现。您必须明确指出 element listB 应该引用 BWrapper。

我不知道如何在模式中设置这个内联,所以我不得不使用外部 .xjb 文件。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings version="2.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">
<!-- bindings in the scope of the schema -->
<jaxb:bindings schemaLocation="./Test.xsd" node="/xs:schema">

<!-- apply bindings in the scope of the complex type B. -->
<jaxb:bindings node="//xs:complexType[@name='B']">
<!-- the java BWrapper extends the B object created by XJC -->
<jaxb:class implClass="com.foobar.BWrapper"/>
</jaxb:bindings>

<!-- specify bindings in the scope of the element 'listB' within -->
<!-- the the complex type A -->
<jaxb:bindings node="//xs:complexType[@name='A']//xs:element[@name='listB']">
<!-- the element should reference the BWrapper cLass -->
<jaxb:class ref="com.foobar.BWrapper"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>

这将生成:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "A", propOrder = {
"listB",
"singleB"
})
public class A {
protected List<com.foobar.BWrapper> listB;
@XmlElement(required = true, type = com.foobar.BWrapper.class)
protected com.foobar.BWrapper singleB;

listB 的 getter 返回 BWrappers 列表。我不确定为什么单个项目和列表之间存在这种不一致,但至少这是有效的。

关于java - JAXB classImpl 绑定(bind)(使用扩展生成的 impl 的特定 impl)但 getter 返回父类(super class)型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6372325/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com