下面我将演示 JAXB(JSR-222) 和
any用一个例子:
有效载荷
该
any属性用注释
@XmlAnyElement(lax=true)。这意味着对于该属性,如果某个元素通过
@XmlRootElement或与一个类关联,
@XmlElementDecl则如果没有将该元素设置为的实例,则将使用相应对象的实例来填充该属性
org.w3c.dom.Element。
package forum13941747;import java.util.List;import javax.xml.bind.annotation.*;@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "Payload", propOrder = { "any"})public class Payload { @XmlAnyElement(lax = true) protected List<Object> any;}oo
以下是带有注释的类的示例
@XmlRootElement。
package forum13941747;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElementpublic class Foo {}酒吧
下面是一个没有
@XmlRootElement注释的类的示例。在此用例中,我们将
@XmlElementDecl在带有的工厂类(通常称为
ObjectFactory)上使用注释
@XmlRegistry。
package forum13941747;public class Bar {}对象工厂
下面是
@XmlElementDecl为
Bar该类指定注释的示例。
package forum13941747;import javax.xml.bind.JAXBElement;import javax.xml.bind.annotation.*;import javax.xml.namespace.QName;@XmlRegistrypublic class ObjectFactory { @XmlElementDecl(name="bar") public JAXBElement<Bar> createBar(Bar bar) { return new JAXBElement<Bar>(new QName("bar"), Bar.class, bar); }}input.xml
以下是我们用于此示例的输入文档。有3个元素对应于该
any属性。第一个对应于类
@XmlRootElement上的注释
Foo。第二个对应于该类的
@XmlElementDecl注释,
Bar第三个不对应于任何域类。
<?xml version="1.0" encoding="UTF-8"?><payload> <foo/> <bar/> <other/></payload>
演示版
在下面的演示代码中,我们将解组输入文档,然后在结果
any属性中输出对象的类,然后将
payload对象编组回XML。
package forum13941747;import java.io.File;import javax.xml.bind.*;public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Payload.class, Foo.class, ObjectFactory.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("src/forum13941747/input.xml"); Payload payload = (Payload) unmarshaller.unmarshal(xml); for(Object o : payload.any) { System.out.println(o.getClass()); } Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(payload, System.out); }}输出量
以下是运行演示代码的输出。请注意与
any属性中的对象相对应的类。该
foo元素成为实例
Foo类。该
bar元素成为实例
JAXBElement持有的一个实例
Bar。该
other元素成为了一个实例
org.w3c.dom.Element。
class forum13941747.Fooclass javax.xml.bind.JAXBElementclass com.sun.org.apache.xerces.internal.dom.ElementNSImpl<?xml version="1.0" encoding="UTF-8" standalone="yes"?><payload> <foo/> <bar/> <other/></payload>



