javax.xml.bind.annotation.*
java中实现bean和XML的数据绑定类
JAXB : Java API for XML Binding
作用是 java对象 <---> xml文件 之间的转换
JAXB Annotation
@XmlRootElement // xml 文件的根元素
@XmlElement
@XmlAccessorType // 表明类内,什么样的成员 是 可以被xml 转化 传输的 可以是 FIELD PROPERTY ...
@XmlTransient
@XmlJavaTypeAdaptor
=========================================
下面是一个例子:
Boy.java
package jaxb;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessType;
@XmlRootElement // 必须要标明这个元素
@XmlAccessorType(XmlAccessType.FIELD)
public class Boy {
String name = "CY";
}
JAXBTest.java
package jaxb;
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class JAXBTest {
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(Boy.class);
Marshaller marshaller = context.createMarshaller();
Unmarshaller unmarshaller = context.createUnmarshaller();
Boy boy = new Boy();
marshaller.marshal(boy, System.out);
System.out.println();
String xml = "<boy><name>David</name></boy>";
Boy boy2 = (Boy) unmarshaller.unmarshal(new StringReader(xml));
System.out.println(boy2.name);
}
}
下面是运行结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><name>CY</name></boy>
David
先是marshall成 xml文件,
再是把 xml 文件 unmarshal 成 java object。
--------------------------------------------------
改动一:
@XmlAccessorType(XmlAccessType.FIELD) --> @XmlAccessorType(XmlAccessType.PROPERTY)
意思是 只有 属性 才能被转换成 xml 中的标签。
所以再运行的结果是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy/>
CY
就是说 java object 转换成 xml 的时候,name 不是属性(因为没有 get set方法),所以name不转换成标签。
-----------------------------------------------------
改动二:
在 改动一 的基础上,给name属性添加 get set 方法。 再运行,结果为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><name>CY</name></boy>
David
由此 可见 @XmlAccessorType 这个annotation 的作用。
-----------------------------------------------------
改动三:
在改动二 的基础上,给Boy 再添加一个field, int age=10, 即:
package jaxb;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessType;
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {
String name = "CY";
int age = 10;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
显然,这个age 是不会被 转化 到xml 文件中的。解决办法是:
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlAccessType;
@XmlRootElement // bixude
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {
String name = "CY";
@XmlElement
int age = 10;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
加上 @XmlElement annotation. 运行结果为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><age>10</age> <name>CY</name></boy>
David
--------------------------------------
对于根元素,可以设置属性:
@XmlRootElement(name="b" nameSpace="http://test")
这样,在生成的xml文件中,<boy> 标签 就会变为 <b> 标签。并且加上一个命名空间。
----------------------------------------
下面解释 @XmlJavaTypeAdaptor 的作用。
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {
private String name = "CY";
private Address address; // 是一个接口
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在 java object 转换成 xml 的时候,接口Address 无法被转换。
所以 这里要加上 @XmlJavaTypeAdapter(AddressAdapter.class)
所以 要多写一个AddressAdaptor 类。
这个类会返回Address接口的一个具体实现类的对象。
这 就是 @XmlJavaTypeAdapter 的作用
分享到:
相关推荐
### 3.2 JAXB Annotation 使用说明 #### 3.2.1 @XmlType @XmlType 定义映射的一些规则,用在 class 类的注解,常与 @XmlRootElement,@XmlAccessorType 一起使用。 参数: * propOrder:指定映射 XML 时的节点...
例如,`javax.xml.bind.annotation`包包含了用于注解Java类以进行XML绑定的注解,如`@XmlRootElement`、`@XmlElement`等。此外,`javax.xml.bind`包中包含了解码和编码XML数据的主要类,如`Unmarshaller`和`...
它定义了如`javax.xml.bind.annotation`和`javax.xml.bind`等包,提供了注解和API,使得开发者能够声明哪些Java类和属性应该映射到XML元素和属性。 `jsr173_1.0_api.jar`是Java Simple API for XML Processing ...
**JAXB(Java Architecture for XML Binding)** 是Java平台上的一个标准技术,用于将Java对象绑定到XML(eXtensible Markup Language)文档,以及从XML数据还原为Java对象。它是Java SE和Java EE的一部分,提供了方便...
1. **注解支持(Annotation Support)**:JAXB 2.0引入了注解,使得无需XML绑定文件就可以直接在Java类上声明XML映射。 2. **更强大的绑定编译器**:可以处理更复杂的XML Schema特性,如复杂类型和继承。 3. **性能...
而JAXB(Java Architecture for XML Binding)是Java提供的一种标准API,它允许我们轻松地在Java对象(javabean)和XML文档之间进行转换。通过JAXB,开发者可以避免手动编写XML解析和序列化代码,极大地提高了开发...
JAXB-XML 注解 JAXB(Java Architecture for XML Binding) 是一个根据 XML Schema 1.0 将 Java 对象转换为 XML 的绑定框架。JAXB 提供了一些注解来控制 Java 对象和 XML 之间的转换过程。这些注解可以应用于 Java 类...
**Java Architecture for XML Binding (JAXB)** 是Java平台上的一个标准技术,用于在XML文档和Java对象之间进行数据绑定。它允许开发者将XML结构转换为Java对象,反之亦然,从而简化了XML处理。JAXB提供了两个核心...
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; @XmlRootElement(name = "employee") public ...
5. **处理命名空间的jar包**:虽然JDK 1.6内置了基本的JAXB实现,但处理特定的命名空间或扩展功能可能需要额外的库,如`jaxb-api.jar`、`jaxb-impl.jar`和`javax.xml.bind.annotation.jar`等。这些jar包提供了完整的...
J2EE中解析XML文件的技术。最初JAXB是JavaEE的一部分,在JDK6.0中,sun将其移到了JavaSE中。在JDK6.0中,JAXB的版本中2.0,比起1.0版本,JAXB2.0基于Annotation来标识要作绑定的类和属性,从而缩减了开发工作量。
Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准API。它使得在Java应用程序中使用XML数据变得更加方便,无需手动编写大量的转换代码。本教程将详细介绍JAXB如何实现...
4. **注解驱动的映射(Annotation-Based Mapping)**:JAXB允许使用Java注解来指定Java类与XML元素之间的对应关系,使得无需绑定文件就能完成映射。 ### JAXB使用步骤 1. **创建Java模型类**:定义要序列化的Java...
JAXB 使用 javax.xml.bind.annotation 包下的 Java 标注,例如: * @XmlRootElement:标注 Java 类为 XML 根元素 * @XmlElement:标注 Java 属性为 XML 元素 * @XmlAttribute:标注 Java 属性为 XML 属性 六、JAXB...
**XML到Java对象转换技术——基于JAXB** 在软件开发中,XML作为一种数据交换格式,广泛用于不同系统间的数据传输。然而,面对大量的XML数据,手动解析和转换为Java对象显得繁琐且效率低下。这时,Java Architecture...
2. **JavaEE 5中的JAXB注解元素**:在`javax.xml.bind.annotation`包中提供了一系列注解,用于标注Java类,使其与XML元素进行映射。 #### 九、示例 以下是一个简单的示例,展示了如何使用JAXB操作XML文档。 1. **...
在Spring MVC框架中,`mvc:annotation-driven`和`mvc:message-converters`是两个非常重要的元素,它们在处理基于注解的控制器和数据转换方面起着关键作用。本篇文章将深入探讨这两个组件的工作原理以及如何在实际...
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> ...
JAXB 2.0,即JSR 222,引入了Java 5的注解(Annotation)功能,极大地简化了开发人员进行XML和Java对象之间转换的工作。 【JAXB在Java 6中的优势】 1. **注解驱动**:JAXB 2.0允许开发者使用注解来标记需要进行...