JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。
JDK中JAXB相关的重要Class和Interface:
JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。
JDK中JAXB相关的重要Annotation:
一般用到的就几个:
@XmlRootElement:表示映射到根目录标签元素
@XmlElement:表示映射到子元素
@XmlAttribute:表示映射到属性
@XmlElementWrapper :表示类型是集合元素的子元素的上层目录
要把实现相互转换,首先你得根据目录结构设计类对象
比如xml中有一下目录:
- </pre><pre name="code" class="html"><pre name="code" class="html"><A>
- <B></B>
- <C c=".."></C>
- <D>
- <E e="...">
- <F></F>
- <G>
- <H></H>
- </G>
- <G>
- <H></H>
- <M></M>
- </G>
- <G>
- <H></H>
- <M></M>
- </G>
- <G>
- <H></H>
- <M></M>
- </G>
- </E>
- </D>
- </A>
那么Java Bean 有ClassA、ClaccC、ClassD、ClassE、ClassG5个类
对于JAXB相关的重要Annotation的声明,如@Xml.....,可以放在成员变量的setter()或getter()方法上,两者中任选其一即可,但决不能放在成员变量上,否则运行将抛出异常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException。
ClassA
- @XmlRootElement(name = "A")
- Class ClassA{
- private Object b;
- private C c;
- private D d;
- @XmlElement(name = "B")
- getB();
- setB();
- @XmlElement(name = "C")
- getC();
- setC();
- @XmlElement(name = "D")
- getD();
- setD();
- }
ClassC
ClassD
- @XmlRootElement(name = "C")
- Class ClassC{
- private Object c;
- @XmlAttribute(name = "c")
- getC();
- setC();
- }
- @@XmlRootElement(name = "D")
- Class ClassD{
- private E e;
- @XmlElement(name = "E")
- getE();
- setE();
- }
ClassE
- @@XmlRootElement(name = "E")
- Class ClassE{
- private Object e;
- private Object f;
- private G g;
- @XmlAttribute(name = "e")
- getE();
- setE();
- @XmlElement(name = "F")
- getF();
- setF();
- @XmlElement(name = "G")
- getG();
- setG();
- }
ClassG
- @XmlRootElement(name = "G")
- Class ClassG{
- private Object h;
- private Object m;
- @XmlAttribute(name = "H")
- getH();
- setH();
- @XmlAttribute(name = "M")
- getM();
- setM();
- }
下面介绍如何将xml文件转换为Bean
如果xml文件中有中文,记得把编码方式从UTF-8变为GBK
- public static void main(String[] args) {
- //xml转换成bean
- try {
- File file = new File("C:\\file1.xml");
- JAXBContext jaxbContext = JAXBContext.newInstance(A.class);
- Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
- A a = (A) jaxbUnmarshaller.unmarshal(file);
- System.out.println(fox.toString());
- } catch (JAXBException e) {
- e.printStackTrace();
- }
- }
将bean转换为xml
这个之后再来说