gpt4 book ai didi

java - 如何删除 xmlns :xsi and xsi:type from JAXB marshalled XML file

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:44 25 4
gpt4 key购买 nike

我有一组 JAXB 生成的类,其中一些类有 setter 方法接受“对象”作为参数。例如:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="Car", propOrder = {
"defaultCar"
}

public class Car {
@XmlElement(name = "DefaultCar")
protected Object defaultcar;

public void setDefaultCar(Object value) {
this.defaultCar = value;
}

在我的代码中创建这些类的实例后,我调用 setter 方法并传入所需的值。尽管该方法的参数是 Object,但值很可能是字符串(我无法控制它的定义方式)。但是,为了保持一致,我将字符串强制转换为 Object,以便它与方法的参数类型相匹配。代码看起来像这样:

    Object value = "Old Banger";
Method method = aCar.getClass().getMethod("setDefaultCar", Object.class);
method.invoke(aCar, value);

当我整理 Java 对象时,我在生成的 XML 中得到以下内容,就在字符串值的前面:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string" 

我在某处读到有关方法参数类型与传递给它的数据类型不匹配的信息。在我的例子中,方法参数是“Object”,但我将一个字符串传递给它(尽管我已经将它转换为 Object)。我也看过这篇文章,它看起来与我的问题相似:

"xsi:type" and "xmlns:xsi" in generated xml by JAXB

但是,它并没有帮助我克服我的问题。有没有办法删除这些对 xmlns:xsi 和 xsi:type 的引用?

谢谢

最佳答案

如果您的数据指定了模型以外的其他类型,则 JAXB 会导出 xsi:type。在您的例子中,您设置了一个字符串,但该字段是 Object。所以你的数据与你的模型有不同的类型。该行为是正确的。

如何解决这个问题。您已将属性类型与数据类型对齐。有很多方法可以实现这一点:

  • 让它成为String,为什么它首先是一个Object
  • 更新:您可以使用jaxb:javaType对此具有约束力。
  • Ùse @XmlElementRef/@XmlMixed 组合。

However, to keep things consistent, I cast the string to Object so that it matches the method's parameter type.

当您将字符串转换为对象时,您认为字符串会发生什么变化? :)

关于java - 如何删除 xmlns :xsi and xsi:type from JAXB marshalled XML file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27129969/

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