目前我正致力于将对象转换为XML,我注意到所有对象属性都列为XML元素(节点),除非您在特定的getter或设置上使用@XmlAttribute
只是想知道有没有办法在JAXB中自动将所有对象属性转换为XML属性。
示例代码:
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);
答案 0 :(得分:1)
注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。
目前没有办法配置默认情况下,简单属性应映射到XML属性。已为MOXy提交以下增强请求以添加此行为。
答案 1 :(得分:0)
您是否尝试在类顶级使用@XmlRootElement?
答案 2 :(得分:0)
如果您将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:attributes作为Java中的属性。