JAXB: преобразовать Javabean Object в XML все свойства как атрибуты XML, а не элементы XML - PullRequest
1 голос
/ 09 февраля 2012

В настоящее время я работаю над преобразованием объекта в XML, и я замечаю, что все свойства объекта перечислены в виде элементов XML (узла), если вы не используете @XmlAttribute для определенного метода получения или настройки

Просто интересно, есть ли способ автоматически преобразовать все свойства объекта в атрибуты XML в JAXB.

Пример кода:

JAXBContext jc = JAXBContext.newInstance( foo.class );
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.setProperty(Marshaller.JAXB_FRAGMENT, true);
Foo foo = new foo();
foo.setType("type");
foo.setValue("value");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
m.marshal(foo, baos);

Ответы [ 3 ]

1 голос
/ 09 февраля 2012

Примечание: Я EclipseLink JAXB (MOXy) и член JAXB (JSR-222) экспертная группа.

В настоящее время нет способа настроить, чтобы по умолчанию простые свойства отображались в атрибуты XML.Следующий запрос на улучшение был подан для MOXy, чтобы добавить это поведение.

  • Ошибка 333604 - Расширение: предоставление метаданных для простых свойств атрибутов по умолчанию (вместо элементов)
0 голосов
/ 09 февраля 2012

Если вы используете JAXB для сложных схем, хорошей идеей будет определить структуру в XSD:

<xsd:schema targetNamespace="http://myUri"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="parent">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element ref="child" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:long"/>
        <xsd:attribute name="name" type="xsd:string"/>
    </xsd:complexType>
</xsd:element>
<xsd:element name="child">
    <xsd:complexType>
        <xsd:attribute name="id" type="xsd:long"/>
        <xsd:attribute name="name" type="xsd:string"/>
        <xsd:attribute name="code" type="xsd:string"/>
    </xsd:complexType>
</xsd:element>

Это можно скомпилировать с помощью jaxb-xjcв .java файлов, и вы будете иметь определенные атрибуты xsd: как атрибуты в Java.

0 голосов
/ 09 февраля 2012

Вы пытались использовать @XmlRootElement на верхнем уровне класса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...