gpt4 book ai didi

xml - JAXB - 仅为元素的特定子类型设置 XmlAdapter?

转载 作者:数据小太阳 更新时间:2023-10-29 01:52:31 25 4
gpt4 key购买 nike

我必须生成一个 xml 元素,该元素的值可以是任何“原始类型”(xsd:string、xsd:boolean 等)。示例:

<field xsi:type="xsd:string" name="aString">String Value</field>
<field xsi:type="xsd:dateTime" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>
...

所以,我使用这个实现让 JAXB 决定原始类型的 xsi:type:

public class Field {
@XmlAttribute
private String name;

@XmlElement
Object value;
}

它按预期工作,但所有 java.util.Date 获取类型 xs:dateTime ...

现在我只想在“值”对象是 java.util.Date 的实例时更改编码器的行为,以获取如下字段:

<field xsi:type="xsd:date" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>

所以我创建了一个适配器,但是如果我尝试这样做:

@XmlElement
@XmlJavaTypeAdapter(DateAdapter.class)
Object value;

适配器必须处理 java.lang.Object 类型

public class DateAdapter extends XmlAdapter<String, Object> {...}

但我不想为所有其他对象(Integer、Double 等)松开 JAXB 编码器......

有没有办法为元素的特定子类型设置适配器?

最佳答案

虽然我来自 XSD 并从那里生成类,但我遇到了类似的情况。也就是说,该解决方案也应该适用于您。

在我的例子中,我想在 XSD 模型中扩展一个简单字符串的使用,以便它在 Java 代码中作为 UUID 出现,然后另一个在其他地方作为类出现,等等。 XML端,都是字符串(xs:string),那么java端如何把所有这些字符串分到不同的类型...

我最后做的是,在 XSD 中,我为每种情况创建了简单类型,这里是 UUID 声明:

并在需要时使用它而不是字符串。

然后我创建了一个绑定(bind)文件,我在其中指定了我的 XmlAdaptor,就像你所做的一样,除了现在我有单独的目标,因此可以使用多个专门针对每个 xml“类型”的适配器。

现在,您在这里遇到的另一个困难是,在 Java 端,您的字段表示只是一个对象。我想你一旦知道了类型属性就转换它。也许为每个案例创建一个字段子类,这将允许您更改 typeADaptor 声明。

关于xml - JAXB - 仅为元素的特定子类型设置 XmlAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900268/

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