Как избавиться от пространства имен при маршалинге общих объектов с помощью JAXB
Я использую следующий код для сериализации класса:
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-файл generaetd, там есть пространство имен:
<?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, что он НЕ должен добавлять это? Я смотрю на это сейчас все утро и попробовал несколько вещей, которые я нашел через Google, но ничего не помогло.
Теперь я нашел эту тему здесь: Как выполнить маршалинг без пространства имен? но проблема в том, что принятый ответ только частично указан, и теперь я не знаю, поможет ли это мне. XMLStreamWriter
это интерфейс, и я не хочу реализовывать весь потоковый писатель только для этого. Так есть ли способ продлить ByteArrayOutputStream
без необходимости реализации всех других функций такой XMLWriter потребуется?
1 ответ
В этом случае использования http://www.w3.org/2001/XMLSchema-instance
а также http://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). Это ваш вариант использования или у вас есть другая объектная модель?