3

我使用以下代码序列化一个类:

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();
}

但是当我查看generaetd 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 它不应该添加它?我现在整个早上都在看这个,并尝试了我通过谷歌找到的几件事,但没有任何帮助。

现在我在这里找到了这个线程:如何在没有命名空间的情况下编组?但问题是接受的答案只是部分列出,现在我不知道这是否对我有帮助。XMLStreamWriter是一个接口,我不想为此实现一个完整的流编写器。那么有没有一些方法可以扩展ByteArrayOutputStream而不需要实现所有其他功能,这样的 XMLWriter 需要?

4

1 回答 1

2

在这个用例中,由于该属性而引入了http://www.w3.org/2001/XMLSchema-instanceand命名空间。之所以引入该属性,是因为您的 JAXB 实现认为该属性类型是. 解决方案是确保不键入属性。http://www.w3.org/2001/XMLSchemaxsi:typexsi:typeObjectObject

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

于 2013-06-20T10:44:34.497 回答