gpt4 book ai didi

java - 使用 JAXB 编码(marshal)通用对象时如何摆脱命名空间

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

我使用下面的代码来序列化一个类:

public String serialize(T oObject)
{
mMarshaller = getJAXBContext().createMarshaller();
mMarshaller.setProperty(javax.xml.bind.Marshaller.JAXB_ENCODING, "UTF-8");
ByteArrayOutputStream strm = getOutputStream();
mMarshaller.marshal(oObject, strm);
return strm.toString();
}

但是当我查看生成的 XML 时,那里有一个命名空间:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mapEntry>
<key xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">
Key
</key>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">
oValue
</value>
</mapEntry>

有什么方法可以删除这个,或者告诉 JAXB 它不应该添加这个?我现在整个早上都在看这个,并尝试了通过谷歌找到的几件事,但没有任何帮助。

现在我在这里找到了这个线程:How to marshal without a namespace?但问题是只列出了部分接受的答案,现在我不知道这是否对我有帮助。 XMLStreamWriter 是一个接口(interface),我不想为此实现整个流编写器。那么有没有什么方法可以扩展 ByteArrayOutputStream 而无需实现所有其他函数,比如 XMLWriter 需要的?

最佳答案

在此用例中,http://www.w3.org/2001/XMLSchema-instancehttp://www.w3.org/2001/XMLSchema 由于 xsi:type 属性,命名空间被引入。引入 xsi:type 属性是因为您的 JAXB 实现认为属性类型是 Object。解决方案是确保属性未键入 Object

XML 表示看起来像是 java.util.Map 表示的一部分(参见:http://blog.bdoughan.com/2013/03/jaxb-and-javautilmap.html)。这是您的用例还是您有其他对象模型?

关于java - 使用 JAXB 编码(marshal)通用对象时如何摆脱命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17211287/

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