@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)。我也看过这个帖子,看起来和我的问题类似:
然而,这并不能帮助我克服我的问题。是否有方法删除这些对xmlns:xsi和xsi:type的引用?
THX
如果您的数据指定了模型以外的其他类型,JAXB将导出xsi:type
。在您的示例中,设置了一个字符串,但字段是object
。因此数据的类型与模型不同。行为是正确的。
你该怎么解决这个问题。您已经将属性的类型与数据的类型对齐。有很多方法可以实现:
字符串
,为什么它首先是对象
?@XmlElementRef
/@XmlMixed
组合。但是,为了保持一致,我将字符串转换为Object,以便它与方法的参数类型匹配。
问题内容: 使用JAXB时,我想在使用泛型时从XML元素中删除多余的名称空间/类型。我该怎么办或我做错了什么?我想使用泛型,这样我只需要编写一次代码块。 示例代码: 输出: 问题答案: 通用测试 您的JAXB(JSR-222)实现将为每个类创建映射(即,不是type(即)。因此,它将字段视为type 。这将导致属性,因为JAXB实现正在添加足够的信息才能解组相同的类型。 演示版 下面是您可以使用的
问题内容: 我使用JAXB创建文件夹和文件层次结构 我的模特: 我想制作目录和文件树: 但是我在生成的xml中有一个奇怪的“ xsi:type”和“ xmlns:xsi”: 所以我的问题是:这是什么意思,如何删除? 问题答案: 在您的类中,您没有指定集合的类型,这就是JAXB添加属性的原因。 你有: 如果您要包含的实例,则可以执行以下操作: 如果由于某种原因您不想在集合中指定类型,则可以在批注
但是我在生成的XML中有奇怪的“xsi:type”和“xmlns:xsi”: 所以我的问题是:这是什么意思,如何删除它?
问题内容: 我需要有关从UTF-8文件删除BOM并创建其余xml文件的副本的方法的建议。 问题答案: 有因为在UTF-8文件中的BOM的工具断裂是一个 非常 以我的经验平常的事。我不知道为什么会有这么多的否决票(但是这给了我机会去尝试赢得足够的选票来赢得特殊的SO徽章;) 更严重的是:UTF-8 BOM通常没有太大意义, 但 在规格上完全有效(尽管不建议使用)。现在的问题是,很多人不知道BOM在U
我正在尝试封送和取消封送映射到值对/从值对。我可以成功封送该对象,但是,我不能从XML中取消封送它。反封送结果是映射中存在的关键字,但其值为空。 下面是我要封送和取消封送的模型: 而且我还发现了一个关于这个问题的类似问题“JAXB:如何将映射编入 value ”,然而,它并没有解决解编组问题?
2)如果我按照下面的方式编辑package-info,那么它是很好的,但是问题是我创建的是一个JAXB整数元素如下所示,前缀删除没有应用于这些元素