利用JAXB实现xml和bean之间的转换(一)

前端之家收集整理的这篇文章主要介绍了利用JAXB实现xml和bean之间的转换(一)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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中有一下目录:

  1. </pre><pre name="code" class="html"><pre name="code" class="html"><A>
  2. <B></B>
  3. <C c=".."></C>
  4. <D>
  5. <E e="...">
  6. <F></F>
  7. <G>
  8. <H></H>
  9. </G>
  10. <G>
  11. <H></H>
  12. <M></M>
  13. </G>
  14. <G>
  15. <H></H>
  16. <M></M>
  17. </G>
  18. <G>
  19. <H></H>
  20. <M></M>
  21. </G>
  22. </E>
  23. </D>
  24. </A>

那么Java Bean 有ClassA、ClaccC、ClassD、ClassE、ClassG5个类

对于JAXB相关的重要Annotation的声明,如@Xml.....,可以放在成员变量的setter()getter()方法上,两者中任选其一即可,但决不能放在成员变量上,否则运行将抛出异常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException。

ClassA

  1. @XmlRootElement(name = "A")
  2. Class ClassA{
  3. private Object b;
  4. private C c;
  5. private D d;
  6.  
  7. @XmlElement(name = "B")
  8. getB();
  9. setB();
  10.  
  11. @XmlElement(name = "C")
  12. getC();
  13. setC();
  14.  
  15. @XmlElement(name = "D")
  16. getD();
  17. setD();
  18.  
  19. }

ClassC

  1. @XmlRootElement(name = "C")
  2. Class ClassC{
  3. private Object c;
  4.  
  5. @XmlAttribute(name = "c")
  6. getC();
  7. setC();
  8. }
ClassD

  1. @@XmlRootElement(name = "D")
  2. Class ClassD{
  3. private E e;
  4.  
  5. @XmlElement(name = "E")
  6. getE();
  7. setE();
  8.  
  9. }

ClassE

  1. @@XmlRootElement(name = "E")
  2. Class ClassE{
  3. private Object e;
  4. private Object f;
  5. private G g;
  6.  
  7. @XmlAttribute(name = "e")
  8. getE();
  9. setE();
  10.  
  11. @XmlElement(name = "F")
  12. getF();
  13. setF();
  14.  
  15. @XmlElement(name = "G")
  16. getG();
  17. setG();
  18.  
  19. }

ClassG

  1. @XmlRootElement(name = "G")
  2. Class ClassG{
  3. private Object h;
  4. private Object m;
  5.  
  6. @XmlAttribute(name = "H")
  7. getH();
  8. setH();
  9.  
  10. @XmlAttribute(name = "M")
  11. getM();
  12. setM();
  13. }

下面介绍如何将xml文件转换为Bean

  1. public static void main(String[] args) {
  2. //xml转换成bean
  3. try {
  4. File file = new File("C:\\file1.xml");
  5. JAXBContext jaxbContext = JAXBContext.newInstance(A.class);
  6. Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
  7. A a = (A) jaxbUnmarshaller.unmarshal(file);
  8. System.out.println(fox.toString());
  9. } catch (JAXBException e) {
  10. e.printStackTrace();
  11. }
  12. }
如果xml文件中有中文,记得把编码方式从UTF-8变为GBK


将bean转换为xml

这个之后再来说

猜你在找的XML相关文章