JaxbContext生成xml文件或java类对象转化注解
- 格式:docx
- 大小:15.29 KB
- 文档页数:5
转:JaxbContext⽣成xml⽂件或java类对象转化注解XmlAccessType.FIELD:映射这个类中的所有字段到XMLXmlAccessType.PROPERTY:映射这个类中的属性(get/set⽅法)到XMLXmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)XmlAccessType.NONE:不映射@XmlElement指定⼀个字段或get/set⽅法映射到XML的节点。
如,当⼀个类的XmlAccessorType 被标注为PROPERTY时,在某⼀个没有get/set⽅法的字段上标注此注解,即可将该字段映射XML。
参数:defaultValue 指定节点默认值name 指定节点名称namespace 指定节点命名空间required 是否必须(默认false)nillable 该字段是否包含 nillable="true" 属性(默认为false)type定义该字段或属性的关联类型@XmlAttribute 指定⼀个字段或get/set⽅法映射到XML的属性。
参数:name 指定属性名称namespace 指定属性命名空间required 是否必须(默认为false)@XmlTransient 定义某⼀字段或属性不需要被映射为XML。
如,当⼀个类的XmlAccessorType 被标注为PROPERTY时,在某⼀get/set⽅法的字段上标注此注解,那么该属性则不会被映射。
@XmlType 定义映射的⼀些相关规则参数:propOrder 指定映射XML时的节点顺序factoryClass 指定UnMarshal时⽣成映射类实例所需的⼯⼚类,默认为这个类本⾝factoryMethod 指定⼯⼚类的⼯⼚⽅法name 定义XML Schema中type的名称namespace 指定Schema中的命名空间@XmlElementWrapper 为数组元素或集合元素定义⼀个⽗节点。
jaxbcontext字符串转xml方法JAXBContext是Java中用于将Java对象转换为XML表示形式的API。
它是Java Architecture for XML Binding(JAXB)规范的一部分,旨在简化Java对象和XML数据之间的映射过程。
本文将介绍如何使用JAXBContext将字符串转换为XML,并提供一些示例代码和使用建议。
我们需要在Java代码中创建一个JAXBContext对象。
可以使用JAXBContext的静态方法newInstance()来实现这一点。
newInstance()方法接受一个或多个参数,这些参数指定要转换的Java对象的类型或包的名称。
在这种情况下,我们将传递一个字符串参数,它是要转换的XML字符串。
下面是使用JAXBContext将字符串转换为XML的示例代码:```javaString xmlString = "<person><name>John</name><age>30</age></person> ";try {JAXBContext jaxbContext = JAXBContext.newInstance(String.class);Unmarshaller unmarshaller =jaxbContext.createUnmarshaller();StringReader reader = new StringReader(xmlString);String xmlObject = (String) unmarshaller.unmarshal(reader);System.out.println(xmlObject);} catch (JAXBException e) {e.printStackTrace();}```在上面的示例中,我们首先创建一个JAXBContext对象,指定要转换的Java对象的类型为String。
ideajaxb的用法JAXB(Java Architecture for XML Binding)是Java编程语言中的一个标准,用于将XML文档和Java对象之间进行映射。
它提供了一个简单的方法来将XML数据绑定到Java对象,以及将Java对象转换为XML格式。
在本文中,我们将探讨JAXB的用法,并详细介绍其主要功能和优势。
首先,让我们了解一下JAXB的基本概念和术语。
1. Java对象:在JAXB中,Java对象是指在Java编程语言中定义的类。
这些类通过注释(Annotations)来指定其与XML文档之间的映射关系。
3. 绑定(Binding):绑定是指将XML文档和Java对象之间建立映射关系的过程。
JAXB提供了各种绑定操作和工具,以便进行XML和Java对象之间的转换。
接下来,我们将介绍JAXB的主要用法和功能。
1. 数据绑定:JAXB可以将XML文档映射到Java对象,或将Java对象转换为XML文档。
这样,我们可以通过操作Java对象来读取、修改和生成XML数据。
2. 注释(Annotations):JAXB使用注释来指定Java对象与XML文档之间的映射关系。
这些注释可以包含在Java类、属性和方法上。
3. 上下文(Context):JAXB使用上下文对象来处理XML和Java对象之间的转换。
上下文对象负责加载类和处理注释,并提供了转换Java对象为XML或XML为Java对象的方法。
4. 序列化和反序列化:JAXB提供了一种方便的方法来序列化和反序列化Java对象和XML文档。
序列化是指将Java对象转换为XML文档的过程,而反序列化则是将XML文档转换为Java对象。
5.校验与验证:JAXB支持XML文档的校验和验证。
它可以验证XML 文档的格式和结构,并且可以定义和应用各种验证规则。
6. 生成Java类:JAXB提供了一个工具(xjc)来根据给定的XML Schema文件生成Java类。
jaxbelement格式-回复JAXBElement格式是XML文档中常见的一种元素类型。
它提供了一种通用的方式来表示XML中的元素和对应的数据类型。
在本文中,我们将逐步解释JAXBElement的概念、用法和具体步骤。
第一步:了解JAXBElement的概念JAXB(Java Architecture for XML Binding)是Java中用于XML数据绑定的一种技术。
它允许将XML文档转换为Java对象,并将Java对象转换为XML文档。
JAXBElement是JAXB库中的一个关键类,用于表示XML文档中的元素。
JAXBElement是一个泛型类,在Java中表示为JAXBElement<T>,其中T表示元素的类型。
它由包含元素值的数据类型和元素的本地名称组成。
JAXBElement提供了一个通用的方式来表示XML文档中的元素和元素的数据类型。
第二步:使用JAXBElement的步骤在使用JAXBElement之前,我们需要进行准备工作。
首先,我们需要创建一个Java类来表示XML文档中的元素及其属性。
可以使用JAXB提供的xjc工具从XML模式文件(XSD)生成Java类,或手动创建Java类来表示元素。
接下来,我们需要创建一个JAXBContext对象。
JAXBContext是JAXB 库中的一个重要类,用于提供操作XML数据绑定的环境。
可以通过调用JAXBContext.newInstance()方法并传入要绑定的Java类来创建JAXBContext对象。
然后,我们可以使用JAXB生成器(Marshaller)将Java对象转换为XML 文档。
首先,创建一个JAXB生成器对象,通过调用JAXBContext的createMarshaller()方法实现。
然后,使用生成器的marshal()方法将Java 对象转换为XML文档。
在marshal()方法中,我们可以传入表示要生成的元素的JAXBElement对象。
Jaxb2 实现JavaBean与xml互转一、简介JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。
该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。
Jaxb 2.0是JDK 1.6的组成部分。
我们不需要下载第三方jar包即可做到轻松转换。
Jaxb2使用了JDK的新特性,如:Annotation、GenericType等,需要在即将转换的JavaBean中添加annotation注解。
二、重要概念JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。
@XmlType,将Java类或枚举类型映射到XML模式类型@XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。
FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。
其他值还有XmlAccessType.PROPERTY 和XmlAccessType.NONE。
@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。
@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。
@XmlRootElement,将Java类或枚举类型映射到XML元素。
jaxbcontext字符串转xml方法【最新版3篇】篇1 目录1.JAXBContext 简介2.字符串转 XML 的实现方法3.示例代码篇1正文1.JAXBContext 简介JAXB(Java Architecture for XML Binding)是 Java 中的一种用于将 Java 对象转换为 XML 格式,以及将 XML 格式转换为 Java 对象的技术。
在 JAXB 中,JAXBContext 是一个非常重要的类,它用于创建和配置 JAXB 实现。
JAXBContext 通过 unmarshal 方法可以将 XML 格式的数据转换为 Java 对象,通过 marshal 方法可以将 Java 对象转换为XML 格式的数据。
2.字符串转 XML 的实现方法要实现字符串转 XML 的功能,我们可以通过以下步骤:(1)创建一个 Java 类,该类的属性与目标 XML 结构相对应。
(2)使用 JAXBContext 的 unmarshal 方法将 XML 字符串转换为Java 对象。
(3)使用 JAXBContext 的 marshal 方法将 Java 对象转换为 XML 字符串。
3.示例代码下面是一个简单的示例,展示了如何使用 JAXBContext 将字符串转换为 XML:```javaimport javax.xml.bind.JAXBContext;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;import java.io.StringReader;import java.io.StringWriter;public class JAXBContextStringToXML {public static void main(String[] args) {String xmlString = "<?xml version="1.0" encoding="UTF-8"?>"+ "<学生>"+ "<姓名>张三</姓名>"+ "<年龄>20</年龄>"+ "</学生>";JAXBContext jaxbContext =JAXBContext.newInstance(Student.class);try {// 将字符串转换为 Java 对象Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();Student student = (Student) unmarshaller.unmarshal(new StringReader(xmlString));// 将 Java 对象转换为 XML 字符串Marshaller marshaller =jaxbContext.createMarshaller();StringWriter stringWriter = new StringWriter();marshaller.marshal(student, stringWriter);System.out.println("转换后的 XML 字符串:" + stringWriter.toString());} catch (Exception e) {e.printStackTrace();}}}```在这个示例中,我们首先创建了一个名为 Student 的 Java 类,该类包含姓名和年龄两个属性。
XML注释与Description标签及Java:注解(Annotation)的关系⼀.摘要.Net允许开发⼈员在源代码中插⼊XML注释,这在多⼈协作开发的时候显得特别有⽤。
C#解析器可以把代码⽂件中的这些XML标记提取出来,并作进⼀步的处理为外部⽂档。
这篇⽂章将展⽰如何使⽤这些XML注释。
在项⽬开发中,很多⼈并不乐意写繁杂的⽂档。
但是,开发组长希望代码注释尽可能详细;项⽬规划⼈员希望代码设计⽂档尽可能详尽;测试、检查⼈员希望功能说明书尽可能详细等等。
如果这些⽂档都被要求写的话,保持它们同步⽐进⾏⼀个战役还痛苦。
为何不把这些信息保存在⼀个地⽅呢??最明显想到的地⽅就是代码的注释中;但是你很难通览程序,并且有些需要这些⽂档的⼈并不懂编码。
最好的办法是通过使⽤XML注释来解决这些问题。
代码注释、⽤户⼿册、开发⼈员⼿册、测试计划等很多⽂档可以很⽅便的从XML注释中获得。
本⽂讲解.Net中经常使⽤的XML注释.主要使⽤C#语⾔j,.Net平台⽀持的其他语⾔使⽤的XML注释格式基本相同.并且在本系列⽂章的下⼀讲中讲解如何使⽤⼯具将XML注释内容转化为帮助⽂档.⼆.XML注释概述所有的XML注释都在三个向前的斜线之后(///)。
两条斜线表⽰是⼀个注释,编译器将忽略后⾯的内容。
三条斜线告诉编译器,后⾯是XML注释,需要适当地处理。
当开发⼈员输⼊三个向前的斜线后,Microsoft Visual Studio .NET IDE ⾃动检查它是否在类或者类成员的定义的前⾯。
如果是的话,Visual Studio .NET IDE 将⾃动插⼊注释标记,开发⼈员只需要增加些额外的标记和值。
下⾯就是在成员函数前增加三个斜线,⾃动增加的注释⽐如:/// <summary>/// 得到指定酒店的酒店信息/// </summary>/// <param name="hotelId">酒店Id</param>/// <param name="languageCode">语⾔码.中⽂为zh-cn</param>/// <returns>酒店信息对象</returns>[OperationContract]OutHotelInfo GetHotelInfoByHotelId(string loginName, string loginPassword, string hotelId, string languageCode);这⾥嵌⼊的summary,param,returns标记仅仅是Visual Studio能够识别的⼀部分标记,然⽽在智能感知IntelliSense中,并没有把c#规范中所有的标记列出来,遗失的部分只能⽤⼿⼯插⼊。
java xml格式返回报文解析Java中可以使用多种方式解析XML格式的返回报文,常见的方式有DOM解析、SAX解析以及基于XML绑定技术的解析。
每种方式都有不同的特点和适用场景,下面将详细介绍这三种解析方式。
1. DOM解析:DOM(Document Object Model)解析是将整个XML文档加载到内存中,构建成一个树形结构,并提供API来操作这个树。
DOM解析提供了许多API,可以通过节点遍历和搜索、属性读取和设置、节点创建和删除等方式来处理XML文档。
DOM解析适用于对XML文档进行多次读写操作,如增删改查等复杂的操作。
使用Java的DOM解析,可以通过以下几个步骤实现:1)使用DocumentBuilderFactory创建一个DocumentBuilder对象。
2)调用DocumentBuilder的parse方法,传入XML文件的输入流,将XML文档解析为一个Document对象。
3)通过Document对象可以获取XML文档的根元素,从而开始对XML文档进行遍历和操作。
DOM解析的优点是能够将整个XML文档加载到内存中,便于操作和修改。
但是对于较大的XML文件,DOM解析会消耗大量的内存空间。
2. SAX解析:SAX(Simple API for XML)解析是一种基于事件驱动的解析方式,它逐行读取XML文档并触发相应的事件,应用程序根据事件的发生来处理XML文档。
SAX解析的特点是速度快、内存消耗小,适用于对XML文档进行单次顺序读取的操作。
使用Java的SAX解析,可以通过以下几个步骤实现:1)定义一个继承自DefaultHandler的处理器类,重写相应的事件回调方法。
2)使用SAXParserFactory创建一个SAXParser对象。
3)调用SAXParser的parse方法,传入XML文件的输入流和处理器对象,开始解析XML文档。
SAX解析的优点是速度快,内存消耗小,适用于大型XML文件的解析。
JAXB注解@XmlRootElement及XML⽂件解析详解Java代码1. @Retention(value=RUNTIME)2. @Target(value=TYPE)3. public @interface XmlRootElement4.5. @Inherited6. @Retention(value=RUNTIME)7. @Target(value={PACKAGE,TYPE})8. public @interface XmlAccessorType: 将类或枚举类型映射到 XML 元素。
JAXB中的注解,⽤来根据java类⽣成xml内容。
当使⽤ @XmlRootElement 注释对顶层类或枚举类型进⾏注释时,类型值被表⽰为 XML ⽂档中的 XML 元素。
JAXB Annotation@XmlRootElement // xml ⽂件的根元素@XmlElement@XmlAccessorType // 控制默认情况下是否对字段或 Javabean 属性进⾏系列化。
@XmlTransient@XmlJavaTypeAdaptor:参考XmlAccessorType默认规则:默认情况下,如果包中不存在 @XmlAccessorType,那么假定使⽤以下包级别注释。
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)默认情况下,如果类中不存在 @XmlAccessorType,并且没有任何超类是使⽤ @XmlAccessorType 注释的,则假定在类中使⽤以下默认注释:@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)可能值:FIELD: JAXB 绑定类中的每个⾮静态、⾮瞬态字段将会⾃动绑定到 XML,除⾮由 XmlTransient 注释。
NONE: 所有字段或属性都不能绑定到 XML,除⾮使⽤⼀些 JAXB 注释专门对它们进⾏注释。
idea jaxb的用法JAXB(Java Architecture for XML Binding)是Java平台中,用来将Java对象转换为XML以及XML转换为Java对象的Java API。
JAXB提供了一个标准的将Java类映射到XML文档的方式,同时提供了解析XML 文档到Java对象的工具。
JAXB的主要优点是:1. 简单易用,使Java对象与XML的处理更加方便。
2. 提高了Java与XML的互操作性。
3. JAXB提供了一种标准的方式来将Java对象序列化或反序列化为XML文档。
下面是JAXB用法的具体说明:1.JAXB的基本用法:JAXB的基本用法就是将Java对象序列化成XML或将XML反序列化成Java对象。
这可以通过标准的JAXB注解实现。
例如,对于一个Student 类:public class Student 。
private String name;。
private int age;。
private Address address;。
// getter and setter。
}。
Marshalling(将Java对象序列化成XML)。
JAXBConte某t ja某bConte某t = JAXBConte某t.newInstance(Student.class);。
Marshaller marshaller = ja某bConte某t.createMarshaller(;。
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);。
marshaller.marshal(student, new File("student.某ml"));。
上面的代码将Student类的一个实例序列化为XML,并输出到名为student.某ml的文件中。
Unmarshalling(将XML反序列化成Java对象)。
jaxb专题⼀(JAXB实现java对象与xml之间互相转换)⾸先熟悉⼀下JAXB实现对象与xml互转时常⽤的⼀些注解使⽤:1.@XmlRootElement,⽤于类级别的注解,对应xml的跟元素。
通过name属性定义这个根节点的名称。
2.@XmlAccessorType,定义映射这个类中的何种类型都需要映射到xml。
(如果不存在@XmlAccessorType,默认使⽤XmlAccessType.PUBLIC_MEMBER注解) 参数:XmlAccessType.FIELD: java对象中的所有成员变量。
XmlAccessType.PROPERTY:java对象中所有通过getter/setter⽅式访问的成员变量。
XmlAccessType.PUBLIC_MEMBER:java对象中所有的public访问权限的成员变量和通过getter/setter⽅式访问的成员变量。
XmlAccessType.NONE: java对象的所有属性都不映射为xml的元素。
3.@XmlAttribute,⽤于把java对象的属性映射为xml的属性,并可通过name属性为⽣成的xml属性指定别名。
4.@XmlElement,指定⼀个字段或get/set⽅法映射到xml的节点。
通过name属性定义这个根节点的名称。
5.@XmlElementWrapper,为数组或集合定义⼀个⽗节点。
通过name属性定义这个⽗节点的名称。
下⾯来看⼀个例⼦:先定义⼀个学⽣类,Student如下:1 package com.quest.software.bus4j.ui.framework.extend.frameParase.test;23 import java.util.List;45 import javax.xml.bind.annotation.XmlAttribute;6 import javax.xml.bind.annotation.XmlElement;7 import javax.xml.bind.annotation.XmlElementWrapper;89 public class Student {10 String name; //姓名11 String sex; //性别12 int number; //学号13 String className; //班级14 List<String> hobby; //爱好1516 public Student(){17 }18 public Student(String name,String sex,int number,19 String className,List<String> hobby) {20 = name;21 this.sex = sex;22 this.number = number;23 this.className = className;24 this.hobby = hobby;25 }26 @XmlAttribute(name="name")27 public String getName() {28 return name;29 }30 public void setName(String name) {31 = name;32 }3334 @XmlAttribute(name="sex")35 public String getSex() {36 return sex;37 }38 public void setSex(String sex) {39 this.sex = sex;40 }4142 @XmlAttribute(name="number")43 public int getNumber() {44 return number;45 }46 public void setNumber(int number) {47 this.number = number;48 }4950 @XmlElement(name="className")51 public String getClassName() {52 return className;53 }54 public void setClassName(String className) {55 this.className = className;56 }5758 @XmlElementWrapper(name="hobbys")59 @XmlElement(name = "hobby")60 public List<String> getHobby() {61 return hobby;62 }63 public void setHobby(List<String> hobby) {64 this.hobby = hobby;65 }6667 }切记,如果java对象属性同时添加了get和set⽅法,注解不能定义在属性的定义上,只需在get或者set⽅法上定义⼀个即可,否则jaxb会报错!!如下:Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions Class has two properties of the same name "name"然后再定义学⽣集合类,StudentList如下:1 package com.quest.software.bus4j.ui.framework.extend.frameParase.test;23 import java.util.List;45 import javax.xml.bind.annotation.XmlElement;6 import javax.xml.bind.annotation.XmlRootElement;78 @XmlRootElement(name="list")9 public class StudentList {1011 List<Student> students; //所有学⽣信息的集合1213 @XmlElement(name = "student")14 public List<Student> getStudents() {15 return students;16 }1718 public void setStudents(List<Student> students) {19 this.students = students;20 }2122 }最后写xml和java对象互转的类(通过Marshaller类实现将对象转换为xml,同时也可利⽤Unmarshaller类进⾏xml转换为类):1.java对象转换为xml:1 package com.quest.software.bus4j.ui.framework.extend.frameParase.test;23 import java.io.BufferedWriter;4 import java.io.File;5 import java.io.FileWriter;6 import java.io.IOException;7 import java.io.StringWriter;8 import java.util.ArrayList;9 import java.util.List;1011 import javax.xml.bind.JAXBContext;12 import javax.xml.bind.JAXBException;13 import javax.xml.bind.Marshaller;1415 public class BeanToXml {1617 /**18 * java对象转换为xml⽂件19 * @param xmlPath xml⽂件路径20 * @param load java对象.Class21 * @return xml⽂件的String22 * @throws JAXBException23 */24 public static String beanToXml(Object obj,Class<?> load) throws JAXBException{25 JAXBContext context = JAXBContext.newInstance(load);26 Marshaller marshaller = context.createMarshaller();27 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);28 marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");29 StringWriter writer = new StringWriter();30 marshaller.marshal(obj,writer);31 return writer.toString();32 }33 public static void main(String[] args) throws JAXBException, IOException {34 List<String> hobby = new ArrayList<>();35 hobby.add("篮球");36 hobby.add("⾳乐");37 hobby.add("乒乓球");3839 List<Student> studentList = new ArrayList<>();4041 Student st = new Student("张三","男",10001,"尖⼦班",hobby);42 studentList.add(st);43 Student st1 = new Student("李四","男",10002,"普通班",hobby);44 studentList.add(st1);45 Student st2 = new Student("莉莉","⼥",10003,"普通班",hobby);46 studentList.add(st2);4748 StudentList students = new StudentList();49 students.setStudents(studentList);50 String str = BeanToXml.beanToXml(students, StudentList.class);5152 //写⼊到xml⽂件中53 String xmlPath = "D:/testConfig.xml";54 BufferedWriter bfw = new BufferedWriter(new FileWriter(new File(xmlPath)));55 bfw.write(str);56 bfw.close();57 }58 }测试⽣成的xml⽂件如下图:2.xml转换为java对象:1 package com.quest.software.bus4j.ui.framework.extend.frameParase.test;23 import java.io.File;4 import java.io.IOException;5 import java.util.List;67 import javax.xml.bind.JAXBContext;8 import javax.xml.bind.JAXBException;9 import javax.xml.bind.Unmarshaller;1011 public class XmlToBean {1213 /**14 * xml⽂件配置转换为对象15 * @param xmlPath xml⽂件路径16 * @param load java对象.Class17 * @return java对象18 * @throws JAXBException19 * @throws IOException20 */21 public static Object xmlToBean(String xmlPath,Class<?> load) throws JAXBException, IOException{22 JAXBContext context = JAXBContext.newInstance(load);23 Unmarshaller unmarshaller = context.createUnmarshaller();24 Object object = unmarshaller.unmarshal(new File(xmlPath));25 return object;26 }2728 public static void main(String[] args) throws IOException, JAXBException {29 String xmlPath = "D:/testConfig.xml";30 Object object = XmlToBean.xmlToBean(xmlPath,StudentList.class);31 StudentList students = (StudentList)object;32 List<Student> studentList = students.getStudents();3334 for(int i=0;i<studentList.size();i++){35 System.out.println(studentList.get(i).name);36 System.out.println(studentList.get(i).sex);37 System.out.println(studentList.get(i).number);38 System.out.println(studentList.get(i).className);39 for(String str :studentList.get(i).hobby){40 System.out.print(str+" ");41 }42 System.out.println("-------------");43 }44 }45 }测试打印的结果如下:张三男10001尖⼦班篮球⾳乐乒乓球 -------------李四男10002普通班篮球⾳乐乒乓球 -------------莉莉⼥10003普通班篮球⾳乐乒乓球 -------------。
jaxb原理Java Architecture for XML Binding(JAXB)是Java的一项用于将XML数据与Java对象相互转换的技术。
JAXB提供了一种方便的方式,使得开发者能够在Java应用程序和XML文档之间进行无缝的数据交互。
以下是关于JAXB原理的详细解释:1. XML到Java对象的映射JAXB的主要原理之一是将XML文档映射到Java对象。
这个过程包括以下步骤:a. XML Schema定义JAXB使用XML Schema Definition(XSD)来定义XML文档的结构和元素。
XSD是一种用于描述XML文档结构的语言,它定义了XML元素、属性、数据类型等。
b. 生成Java类根据XSD文件,使用JAXB提供的工具(如xjc命令行工具或Maven插件)生成与XML Schema相对应的Java类。
这些生成的Java类用于表示XML文档的结构。
c. Unmarshalling(反编组)在运行时,JAXB的Unmarshaller负责将XML文档解析为相应的Java 对象。
通过读取XML文档并根据XSD文件的规则,JAXB可以准确地将XML元素映射到相应的Java属性和对象。
java// 示例代码JAXBContext jaxbContext =JAXBContext.newInstance(MyClass.class);Unmarshaller unmarshaller =jaxbContext.createUnmarshaller();MyClass myObject =(MyClass)unmarshaller.unmarshal(new File("myObject.xml"));2. Java对象到XML的映射JAXB也支持将Java对象转换为相应的XML文档。
这个过程包括以下步骤:a. XML Schema定义同样,XML Schema定义了Java对象应该如何映射到XML元素和属性。
Myeclipse+jdk1.5以上版本自带JAXB工具(xml和javaBean的转化)JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema 产生Java类的技术。
该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。
JAXBContext提供了一个入口,通过这个入口可以管理必要的XML/Java绑定信息。
客户端应用程序通过newInstance(contextPath)方法得到该类的新实例。
contextPath 参数包含一个或多个Java包名,这些Java包就是了JAXB编译器所产生的接口代码所在的Java包。
该参数值初始化JAXBContext 对象,使得它能够管理JAXB编译器产生的接口;对于Marshaller和Unmarshaller,这两个对象主要是用于Java对象和XML文档互相转换的主要接口(Marshaller 负责从Java对象到XML文档的转换,Unmarshaller负责从XML文档到Java对象的转换)。
Unmarshaller.unmarshal() 的方法可以直接将一个XML文件里的数据转换成Java对象。
实例:import java.io.File;import javax.xml.bind.JAXBContext;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;import com.pobasoft.ws.Bean.CheckUserRsBean;import com.pobasoft.ws.Bean.SelectUserIDListBean;import com.pobasoft.ws.Bean.SelectUserIDListRsBean;import com.pobasoft.ws.Interface.ExportEntityIDListInfo;import com.pobasoft.ws.InterfaceImpl.ExportEntityListInfo;public class Test {//*************XML-->JavaBean***********************public static Object xmltojava(Class cls,File file) throws Exception{JAXBContext ctx=JAXBContext.newInstance(cls);//JAXBContext可以创建Unmarshallers(将XML解析为Java对象)Unmarshaller us=ctx.createUnmarshaller();return us.unmarshal(file);}//*************JavaBean XML***********************public static void javatoxml(Object obj,File file) throws Exception{JAXBContext ctx=JAXBContext.newInstance(obj.getClass());//JAXBContext可以创建Marshallers(将Java对象转换成XML)Marshaller mar=ctx.createMarshaller();mar.marshal(obj,file);}//测试(CheckUserRsBean是已经创建好的Bean对象)在文件保存的操作代码中,也有对JAXB的操作:private void saveAsFile() {......m.marshal(myContainer, new FileOutputStream(filename));......}public static void main(String[] args) throws Exception {CheckUserRsBean crb=new CheckUserRsBean();crb.setKey("abc");javatoxml(crb, new File("C:\\a.xml"));--------------------------------------File f=new File("C:\\a.xml");CheckUserRsBean crb= (CheckUserRsBean) xmltojava(CheckUserRsBean.class, f);System.out.println(crb.getKey());}链接:/xcl119xcl/blog/item/eda41dc451d563ce39db49bb.htmlimport java.beans.IntrospectionException;import java.io.IOException;import java.io.StringReader;import java.io.StringWriter;import mons.betwixt.io.BeanReader;import mons.betwixt.io.BeanWriter;import org.xml.sax.SAXException;import com.pobasoft.ws.Bean.SelectUserIDListBean;public class XMLAndBeanUtil {/*** 将xml字符串转化为对象** @param xmlString* xml字符串* @param className* 类得全称(包名+类名)字符串@param cl* 对象的class名称* @return 转化成的对象*/public Object xmlString2Object(String xmlString ,String className,Class cl) { // 创建一个读取xml文件的流StringReader xmlReader = new StringReader(xmlString);// 创建一个BeanReader实例,相当于转化器BeanReader beanReader = new BeanReader();//配置BeanReader实例beanReader.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);beanReader.getBindingConfiguration().setMapIDs(false); //不自动生成ID//注册要转换对象的类,并指定根节点名称try {//beanReader.registerBeanClass("SelectUserIDListBean", SelectUserIDListBean.class);beanReader.registerBeanClass(className,cl);} catch (IntrospectionException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}// 将XML解析Java ObjectObject obj = null;try {obj = beanReader.parse(xmlReader);} catch (IOException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();}return obj;}/*** 将对象转换为xml字符串*/public String Object2XmlString(Object object) {String xmlString = null;// 创建一个输出流,将用来输出Java转换的XML文件StringWriter outputWriter = new StringWriter();// 输出XML的文件头outputWriter.write("<?xml version='1.0' ?>\n");// 创建一个BeanWriter实例,并将BeanWriter的输出重定向到指定的输出流BeanWriter beanWriter = new BeanWriter(outputWriter);// 配置BeanWriter对象beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(false);beanWriter.getBindingConfiguration().setMapIDs(false);beanWriter.setWriteEmptyElements(false);try {beanWriter.write(object);} catch (Exception e) {e.printStackTrace();}xmlString = outputWriter.toString();// 关闭输出流try {outputWriter.close();} catch (IOException e) {e.printStackTrace();}return xmlString;}}。
XML字符串和JAVA对象之间的转化
1、JAXB中相关的注解、类和接⼝说明
注:教程很全⾯很详细。
但是仅供参考。
主要疑问区分和说明:
1.1 @XmlElementWrapper 注解
对于数组或集合(即包含多个元素的成员变量),⽣成⼀个包装该数组或集合的 XML 元素(称为包装器。
如果不加该注解,集合中的每个对象的⽗节点不是 List 了,⽽是 Class。
具体作⽤可以参考:中的Address,然后和中的computers进⾏对⽐。
问题:XML⼦元素也可以有属性,这种属性要怎么映射?(暂时不知道)
1.2 @XmlAttribute 和 @XmlElement 的区别
基本区别很简单
- @XmlElement,将 Java 类的⼀个属性映射到与属性同名的⼀个 XML 元素。
- @XmlAttribute,将 Java 类的⼀个属性映射到与属性同名的⼀个 XML 属性(作为 Root 类对应 XML 元素上的⼀个属性)。
注意元素和属性。
每个元素都可以有属性,这个属性对应的是哪个元素呢?见:
2、Demo和⼯具类
可以参考教程:
该教程的主要内容优点:包含详细的Demo和说明。
- XML字符串到JAVA对象
- XML⽂件到JAVA对象
- JAVA对象到XML字符串
- JAVA对象到XML⽂件
- 还有对于 List 等集合的处理。
同时,教程中有⼀个很好的⼯具类XMLUtil.java,可以参考,很好的⼀个⼯具类
另外的⼯具类Demo,可以参考明哥。
@待完善。
jaxbelement格式-回复什么是JAXBElement格式?JAXB(Java Architecture for XML Binding)是Java平台上的一种技术,它可以将XML表示的数据转换成Java对象,并且也可以将Java对象转换成XML格式。
JAXB提供了一种简化XML数据绑定过程的方法,使得开发人员可以更加方便地处理XML数据。
在JAXB中,JAXBElement是用于表示XML元素的类。
它是JAXB规范中定义的一种特殊类型,可以用于包装XML元素的值。
JAXBElement提供了一种通用的机制,可以将XML元素和Java对象相互转换。
它可以存储XML元素的值以及与之关联的XML命名空间和元素名称。
JAXBElement类的定义如下:javapublic class JAXBElement<T> extends ObjectJAXBElement类有两个类型参数,第一个类型参数表示XML元素的值的类型,第二个类型参数表示XML元素的实际类型。
JAXBElement类提供了一些方法来获取和设置XML元素的值、命名空间和元素名称。
使用JAXBElement格式的好处是它可以提供更严格的类型检查和更好的类型安全性。
它可以避免在XML绑定过程中出现类型转换错误,提高了代码的可靠性和可维护性。
此外,JAXBElement还可以用于处理复杂的XML结构,如嵌套元素和集合类型。
下面将逐步介绍如何使用JAXBElement格式进行XML数据的绑定和解绑定。
第一步:创建Java对象模型首先,需要定义一个Java对象模型,该模型用于表示XML数据的结构。
可以使用JAXB的注解来定义Java类和属性与XML元素和属性之间的映射关系。
JAXB提供了很多注解,可以根据需要选择合适的注解来配置Java 对象模型。
例如,假设我们有一个XML文档,它的根元素是<student>,包含<name>和<age>两个子元素。
在java的应用程序中,通常XML数据文件要解析成一个java对象。
JAXB的工作原理:JAXB映射主要由四个部分组成,schema、JAXB、XML文档、java对象对比Hibernate映射来说明这四项的工作原理:shema可以看作是数据库中的表结构,document(XML文档)是表中的一条条的数据,而jaxb可以看作是hibernate,他提供schema 到java对象的映射,类似于XXX.HBM的映射文件。
将XML转换成java对象的过程叫unmarshal.将java对象转换成XML的过程叫Marshal。
代码com.helloweenvisf.xml里面的article,java代码了解映射关系!!!!Java对象转换成XML对象(marshal)代码:JAXBDemo.java总结:在将java转换成XML时通常要经过一下几个步骤。
1.通过映射的类创建XMLContext上下文对象,其中参数为映射的类。
JAXBContext context = JAXBContext.newInstance(Article.class)2.通过JAXBComtext上下文对象的createMarshaller()方法,创建一个对象java格式转化成XML的格式,代码如下Marshaller m = context.createMarshaller();3.最后,将JAVA对象转换到制定的输出位置,其中的article为java对象。
m.marshal(article,xmlFile);XML转换成JAVA对象(ummarshal)XML转换成JAVA对象的步骤与之相反。
总结:将XML转换成JAVA对象时候通常要经过以下几个步骤1.通过映射的类创建XMLComtext上下文对象,其中参数为映射的类。
JAXBContext context = JAXBContext.newInstance(Article.class);2.通过JAXBContext上下文对象创建createUnmarshaller()方法,创建XML转换成JAVA对象的格式。
JAXB(Java API for XML Binding),提供了一个快速便捷的方式将Java对象与XML进行转换。
在JAX-WS(Java的WebService规范之一)中,JDK1.6 自带的版本JAX-WS2.1,其底层支持就是JAXB。
JAXB 可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转换为XML 的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal。
我们可以通过在Java 类中标注注解的方式将一个Java对象绑定到一段XML,也就是说,在Java类中标注一些注解,这些注解定义了如何将这个类转换为XML,怎么转换,以及一段XML如何被解析成这个类所定义的对象;也可以使用JAXB的XJC工具,通过定义schema的方式实现Java 对象与XML的绑定(这个下次研究)。
下面来了解一下如何通过标注注解来完成 Marshal 和 UnMarshal 的过程。
我用的是JAXB2_20101209.jar ,可以到[url]/[/url] 下载最新版本。
首先看个小例子定义一个java类Java代码package com.why.jaxb;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElementpublic class People {public String id = "001";public String name = "灰太狼";public int age = 26;}Java To XML(Marshal)Java代码package com.why.jaxb;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;public class Java2XML {/*** @param args* @throws JAXBException*/public static void main(String[] args) throws JAXBException {JAXBContext context = JAXBContext.newInstance(People.class);Marshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_ENCODING,"gb2312");//编码格式marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//是否格式化生成的xml串marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);//是否省略xml 头信息(<?xml version="1.0" encoding="gb2312" standalone="yes"?>)People people = new People();marshaller.marshal(people, System.out);}}XML To Java(UnMarshal)Java代码package com.why.jaxb;import java.io.File;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;import org.xml.sax.SAXException;public class XML2Java {/*** @param args* @throws JAXBException* @throws JAXBException* @throws SAXException*/public static void main(String[] args) throws JAXBException {JAXBContext context = JAXBContext.newInstance(People.class);Unmarshaller unmarshaller = context.createUnmarshaller();File file = new File("src/people.xml");People people = (People)unmarshaller.unmarshal(file);System.out.println(people.id);System.out.println();System.out.println(people.age);}}其实Marshal 和UnMarshal的过程并不复杂,只需要从JAXBContext中获得Marshaller或Unmarshaller对象,就可以让JAXB帮我们来进行转换了。
我们需要操作的主要内容是定义一个规则,告诉JAXB如何将一个类、按照什么样的格式转换为XML,下面是JAXB中主要的一些注解。
@XmlRootElement 将一个Java类映射为一段XML的根节点参数:name 定义这个根节点的名称namespace 定义这个根节点命名空间@XmlAccessorType 定义映射这个类中的何种类型需要映射到XML。
可接收四个参数,分别是:XmlAccessType.FIELD:映射这个类中的所有字段到XMLXmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XMLXmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)XmlAccessType.NONE:不映射@XmlElement 指定一个字段或get/set方法映射到XML的节点。
如,当一个类的XmlAccessorType 被标注为PROPERTY时,在某一个没有get/set方法的字段上标注此注解,即可将该字段映射到XML。
参数:defaultValue 指定节点默认值name 指定节点名称namespace 指定节点命名空间required 是否必须(默认为false)nillable 该字段是否包含 nillable="true" 属性(默认为false)type 定义该字段或属性的关联类型@XmlAttribute 指定一个字段或get/set方法映射到XML的属性。
参数:name 指定属性名称namespace 指定属性命名空间required 是否必须(默认为false)@XmlTransient 定义某一字段或属性不需要被映射为XML。
如,当一个类的XmlAccessorType 被标注为PROPERTY时,在某一get/set方法的字段上标注此注解,那么该属性则不会被映射。
@XmlType 定义映射的一些相关规则参数:propOrder 指定映射XML时的节点顺序factoryClass 指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身factoryMethod 指定工厂类的工厂方法name 定义XML Schema中type的名称namespace 指定Schema中的命名空间@XmlElementWrapper 为数组元素或集合元素定义一个父节点。
如,类中有一元素为List items,若不加此注解,该元素将被映射为<items>...</items><items>...</items>这种形式,此注解可将这个元素进行包装,如:@XmlElementWrapper(name="items")@XmlElement(name="item")public List items;将会生成这样的XML样式:<items><item>...</item><item>...</item></items>@XmlJavaTypeAdapter 自定义某一字段或属性映射到XML的适配器。
如,类中包含一个接口,我们可以定义一个适配器(继承自 javax.xml.bind.annotation.adapters.XmlAdapter 类),指定这个接口如何映射到XML。
@XmlSchema 配置整个包的namespace,这个注解需放在package-info.java文件中。
jaxb编码:JAXBContext jaxbContext = JAXBContext.newInstance(clazz);Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();InputStreamReader reader=new InputStreamReader(inputStream,"GBK"); //在此修改编码return unmarshaller.unmarshal(reader);。