![](/img/trans.png)
[英]How to make an “Exception” type class consumed by jaxb-xjc Throwable?
[英]How to make class to be parsable by JAXB?
嗨,我需要使用JAXB创建以下XML,但是由于它具有许多父子关系,所以我不想创建那么多类来创建该XML。 任何人都可以提出关于如何在单个类的帮助下制作XML的想法。
<Info>
<details>
<arrange>
<name>joseph</name>
<ID>12</ID>
<Date>2012-03-25T11:23:42+10:00</Date>
<LatestDate>
<Start>2012-06-25T09:24:59+10:00</Start>
<End>2013-06-25T09:24:59+10:00</End>
</LatestDate>
<Additional>
<name>IVR</name>
</Additional>
</arrange>
</details>
</Info>
编写一个XSD并使用JAXB的xjc代码生成器创建类。
@XmlElementWrapper
将完成这项工作,您必须编写一个类,并使用其包装元素定义每个元素,如您在此处所读: JAXB将多个XML元素解组为单个类
您必须将所需的JAXB-Annotations添加到您的类中。
然后,您将能够解析XML文件并获取Java对象。
注意:我是EclipseLink JAXB(MOXy)的负责人,并且是JAXB(JSR-222)专家组的成员。
由于您希望通过单个类映射到XML,因此可以使用MOXy的@XmlPath
扩展名(请参阅: http : @XmlPath
)。
信息
import java.util.Calendar;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement(name="Info")
@XmlAccessorType(XmlAccessType.FIELD)
public class Info {
@XmlPath("details/arrange/name/text()")
private String name;
@XmlPath("details/arrange/ID/text()")
private int id;
@XmlPath("details/arrange/Date/text()")
private Calendar date;
@XmlPath("details/arrange/LatestDate/Start/text()")
private Calendar start;
@XmlPath("details/arrange/LatestDate/End/text()")
private Calendar end;
@XmlPath("details/arrange/Additional/name/text()")
private String additionalName;
}
jaxb.properties
要将MOXy指定为JAXB提供程序,您需要在与域模型相同的程序包中包含一个名为jaxb.properties
的文件,并带有以下条目(请参阅: http : //blog.bdoughan.com/2011/05/specifying-eclipselink- moxy-as-your.html )。
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
演示
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Info.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum16956564/input.xml");
Info info = (Info) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(info, System.out);
}
}
input.xml中/输出
<?xml version="1.0" encoding="UTF-8"?>
<Info>
<details>
<arrange>
<name>joseph</name>
<ID>12</ID>
<Date>2012-03-25T11:23:42+10:00</Date>
<LatestDate>
<Start>2012-06-25T09:24:59+10:00</Start>
<End>2013-06-25T09:24:59+10:00</End>
</LatestDate>
<Additional>
<name>IVR</name>
</Additional>
</arrange>
</details>
</Info>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.