gpt4 book ai didi

java - 如何使用 JAXB 为多态类型添加额外的 XML 元素

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:39 28 4
gpt4 key购买 nike

我使用 JAXB 序列化 java 对象,并且想要以下 XML 输出:

<attribute>
<type>
<listType>
<itemType>
<simpleType>
<dataLength>80</dataLength>
<dataType>string</dataType>
<decimalPlaces>0</decimalPlaces>
</simpleType>
</itemType>
</listType>
</type>
</attribute>

我的 java 类如下所示:

属性.java

@XmlRootElement
public class Attribute
{
private Type type;

public Type getType()
{
return this.type;
}

public void setType(Type type)
{
this.type = type;
}
}

Type.java

public abstract class Type
{

}

SimpleType.java

public class SimpleType extends Type
{
private int dataLength;

private int decimalPlaces;

private String dataType;

// getters and setters...

}

ListType.java

public class ListType extends Type
{
private Type itemType;

// getters and setters...

}

ComplexType.java

public class ComplexType extends Type
{
private List<Attribute> attributes = new ArrayList<>();

// getters and setters...

}

无需任何附加注释,JAXB 就会生成以下内容:

<attribute>
<type xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="listType">
<itemType xsi:type="simpleType">
<dataLength>80</dataLength>
<dataType>string</dataType>
<decimalPlaces>0</decimalPlaces>
</itemType>
</type>
</attribute>

我不希望类型信息表示为 XML 属性 (xsi:type),而是希望有一个额外的 XML 元素,如顶部的 XML 代码所示。我认为这是一个典型的用例,但我没有发现任何东西。我有哪些可能性?

最佳答案

如果类结构反射(reflect)了 XML 结构,那么就不会有问题。否则,JAXB 需要 xsi:type 来区分属性对象中的多态类型字段 - 否则它如何重建 POJO?

public class Type {
private ListType listType;
}
public class ListType {
private ItemType itemType;
}
public class ItemType {
private SimpleType simpleType;
}

关于java - 如何使用 JAXB 为多态类型添加额外的 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35870047/

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