`

JAXB中不使用annotation的示例

阅读更多
在JAXB中,其实不用annotation也是可以的,虽然比较麻烦,下面是一个例子:

package blog.defaults;
 
import java.util.List;
 
public class Customer {
 
    private String firstName;
    private String lastName;
    private List<PhoneNumber> phoneNumbers;
 
    public String getFirstName() {
        return firstName;
    }
 
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
 
    public String getLastName() {
        return lastName;
    }
 
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
 
    public List<PhoneNumber> getPhoneNumbers() {
        return phoneNumbers;
    }
 
    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }
 
}



  另外一个POJO

package blog.defaults;
 
public class PhoneNumber {
 
    private String foo;
    private String bar;
 
    public String getType() {
        return foo;
    }
 
    public void setType(String type) {
        this.foo = type;
    }
 
    public String getNumber() {
        return bar;
    }
 
    public void setNumber(String number) {
        this.bar = number;
    }
 
}



  然后下面的是一个XML文件,先展示的是将xml文件反序列化为CUSTOMER类,
<?xml version="1.0" encoding="UTF-8"?>
<customer>
    <firstName>Jane</firstName>
    <lastName>Doe</lastName>
     <phoneNumbers>
         <number>555-1111</number>
         <type>work</type>
     </phoneNumbers>
     <phoneNumbers>
         <number>555-2222</number>
         <type>home</type>
     </phoneNumbers>
</customer>




   主程序如下:
package blog.defaults;

import javax.xml.bind.*;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Customer.class);

        StreamSource xml = new StreamSource("src/blog/defaults/input.xml");
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        JAXBElement<Customer> je1 = unmarshaller.unmarshal(xml, Customer.class);
        Customer customer = je1.getValue();
 
        JAXBElement<Customer> je2 = new JAXBElement<Customer>(new QName("customer"), Customer.class, customer);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(je2, System.out);
     }

}

   可以看到在Customer customer = je1.getValue();
这句之前,就是读入了xml文件,然后进行unmarshaller的操作,之后得到的是一个
JAXBElement的对象实例,然后通过getValue得到其Customer对象实例。然后
接下来的代码是将customer再重新序列化为xml了。
6
2
分享到:
评论
2 楼 yonge812 2013-08-27  
请问如果对象中的属性名称与xml的节点不一致,应该如何转换?
1 楼 yidao620c 2012-08-06  
其实这种简单的不加annotation的xml序列化和反序列化可以用xstream,复杂的采用jaxb。

相关推荐

    jaxb 使用实例

    4. **注解驱动的映射(Annotation-Based Mapping)**:JAXB允许使用Java注解来指定Java类与XML元素之间的对应关系,使得无需绑定文件就能完成映射。 ### JAXB使用步骤 1. **创建Java模型类**:定义要序列化的Java...

    JAXB的HelloWorld源码

    **HelloWorld示例** 是学习任何新技术的典型起点,JAXB也不例外。在这个例子中,我们通常会创建一个简单的Java类,比如`HelloWorld`,并用JAXB注解来描述如何映射到XML元素。例如: ```java import javax.xml.bind....

    利用JAXB进行xml和javabean之间转换

    如果不希望手动添加注解,可以使用JAXB的绑定工具(如`xjc`)从XML Schema (XSD)文件生成对应的Java类。这一步骤将创建带有正确注解的Java类,以便JAXB理解XML结构。 (3) **实例化Java对象** 创建Java对象并填充...

    jaxb.zip_jaxb

    在这个示例中,我们创建了一个`Unmarshaller`,然后使用`unmarshaller.unmarshal()`方法从XML文件中读取数据并创建一个`Person`对象。 ### JAXB注解 JAXB使用Java注解来指定Java类和XML元素之间的映射关系。例如,...

    JAXB xml与对象转换

    JAXB广泛应用于Web服务、数据交换、配置文件处理等场景,特别是在Java EE环境中,它被用于处理SOAP消息。此外,许多Java框架,如Spring,也支持JAXB进行数据绑定。 总结来说,JAXB是Java中一个强大的工具,用于XML...

    JAXB-XML注解-应用

    JAXB 使用 javax.xml.bind.annotation 包下的 Java 标注,例如: * @XmlRootElement:标注 Java 类为 XML 根元素 * @XmlElement:标注 Java 属性为 XML 元素 * @XmlAttribute:标注 Java 属性为 XML 属性 六、JAXB...

    [精品]JAVA6新特性介绍使用JAXB来实现对象与XML之间的映射.doc

    2. **集成到JDK**:Java 6将JAXB纳入标准库,这意味着开发者不再需要额外下载和管理JAXB的实现,可以直接在Java SE环境中使用。 3. **性能提升**:JAXB 2.0在底层使用了Streaming API for XML(STAX,JSR 173),这...

    用jaxb 实现 xml转java对象技术

    在实际项目中,JAXB通常与Spring框架结合使用,实现RESTful服务中的XML数据交换。同时,JAXB也常被用在Web服务中,如JAX-WS,进行SOAP消息的序列化和反序列化。 总结来说,JAXB是Java开发者处理XML数据的强大工具,...

    jaxb入门学习

    2. **JavaEE 5中的JAXB注解元素**:在`javax.xml.bind.annotation`包中提供了一系列注解,用于标注Java类,使其与XML元素进行映射。 #### 九、示例 以下是一个简单的示例,展示了如何使用JAXB操作XML文档。 1. **...

    JAXB命名空间_动力节点Java学院整理

    3. 在实体类中使用`@XmlRootElement`注解指定元素的命名空间,确保与包级别的命名空间定义一致。 正确理解和使用这些概念,将有助于在JAXB中有效地处理XML文档的命名空间,提高代码的可读性和可维护性。

    jaxb-listnull-check

    1. **使用`@XmlElement(required = true)`**:此注解可以强制JAXB在解析XML时确保元素存在,但不保证元素的子元素(如列表中的项)非空。 2. **自定义异常处理**:创建自定义的`ValidationEventHandler`,在处理过程...

    Jaxb2实现JavaBean与xml互转的方法详解

    3. **注解**:在Jaxb2中,使用注解来指示哪些Java类、属性或字段应该被映射到XML元素或属性。例如: - `@XmlType`:标记Java类或枚举类型与XML模式类型对应。 - `@XmlAccessorType(XmlAccessType.FIELD)`:指定...

    JAVA6新特性介绍

    在提供的代码示例中,`JAXB2Tester`类展示了如何使用JAXB在Java对象和XML之间进行转换。首先,`JAXBContext`实例化用于创建和解析的对象上下文,接着,`Marshaller`和`Unmarshaller`分别用于对象到XML的序列化和XML...

    JavaXml及Bean互转

    在提供的`xml-demo`压缩包中,可能包含了使用这两种方法的示例代码,通过查看和运行这些示例,你可以更好地理解如何在实际项目中应用XStream和JAXB进行XML与Java Bean的互转。无论选择哪种方法,都需要注意处理Java...

    支持XML转Bean

    这个示例展示了如何使用JAXB将XML文件解析为`Person` Bean。同样,也可以通过`Unmarshaller.unmarshal()`方法的其他重载版本来处理XML字符串或Reader等不同输入源。 总结起来,Java的JAXB框架提供了从XML到Java ...

    java对象生成xml数据

    在Java编程中,将Java对象转换为XML数据是一项常见的任务,特别是在处理数据交换或存储...在提供的`demo`文件中,很可能是包含了使用`JAXBContext`和`Marshaller`进行对象到XML转换的示例代码,你可以进一步研究学习。

    Java解析和生成XML.pdf

    当使用JAXB进行操作时,对于类的属性访问控制需要特别注意,例如,如果私有属性设置了public权限的getter/setter方法,则不应使用`@XmlElement`和`@XmlAttribute`注解,否则可能会因为同一个属性在Java类中被映射两...

    Java xml数据格式返回实现操作

    要使用 Jaxb2RootElementHttpMessageConverter,需要在 Controller 中的方法上添加 @ResponseBody 注解,并在返回值类型上添加 @XmlRootElement 注解。 例如,下面是一个简单的示例: ```java import javax.xml....

    XmlRootElement 定义bean自动生成xml

    `@XmlRootElement` 是由javax.xml.bind.annotation包提供的,它的主要用途是在JAXB中将Java类映射为XML文档的根元素。当我们有一个Java类并想将其序列化为XML时,如果没有`@XmlRootElement`,JAXB将无法确定哪个类...

    JAXBContext测试Java对象与xml的相互转换Demo

    这个Demo可以帮助我们理解JAXBContext如何工作,并演示了如何在实际项目中使用JAXB进行数据交换。 总结起来,JAXBContext是Java对象和XML之间转换的关键组件。通过创建JAXBContext实例,我们可以轻松地实现Java对象...

Global site tag (gtag.js) - Google Analytics