`

jaxb2与xml之间相互转换

 
阅读更多
jaxb2与xml之间相互转换
分类: jaxb与xml转换 2011-12-16 22:51 69人阅读 评论(0) 收藏 举报
   什么是JAXB?
  URL url = (new URI("http://shz01d007:9025/adviser/100241/accounts")).toURL();
AccountTestList content = (AccountTestList) unMarshal.unmarshal(url);
            System.out.println(content.toString());
@XmlRootElement(name = "accounts")
public class AccountTestList extends ArrayList<AccountTest> {

    @XmlElementRef(type = AccountTest.class)
    public List<AccountTest> getAccountTest() {
        return this;
    }
}
@XmlRootElement(name = "account")
public class AccountTest {

    
    private String id;
   
    private String acctName;

    /**
     * @return the id
     */
    public String getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * @return the acctName
     */
    public String getAcctName() {
        return acctName;
    }

    /**
     * @param acctName the acctName to set
     */
    public void setAcctName(String acctName) {
        this.acctName = acctName;
    }
}
    Java  Architecture for XML Binding (JAXB)是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
    这意味着你不需要处理甚至不需要知道XML编程技巧就能在Java应用程序中利用平台核心XML数据的灵活性。而且,可以充分利用XML的优势而不用依赖于复杂的XML处理模型如SAX或DOM。JAXB隐藏了细节并且取消了SAX和DOM中没用的关系——生成的JAXB类仅描述原始模型中定义的关系。其结果是结合了高度可移植Java代码和高度可移植的XML数据。其中这些代码可用来创建灵活、轻便的应用程序和Web服务。

JAXB2使用了JDK的新特性。如:Annotation、GenericType等,Jaxb2需要在即将转换的JavaBean中添加annotation注解。下面我们就来看看Jaxb2是怎么样完成Java对象到XML之间的相互转换的吧。

[java] view plaincopy
@XmlRootElement(name="bean") 
public class Info implements Serializable { 
 
        private int id; 
        private String name; 
        private String email; 
        @XmlAttribute(name="num") 
        public int getId() { 
            return id; 
        } 
        public void setId(int id) { 
            this.id = id; 
        } 
        @XmlElement 
        public String getName() { 
            return name; 
        } 
        public void setName(String name) { 
            this.name = name; 
        } 
        @XmlElement 
        public String getEmail() { 
            return email; 
        } 
        public void setEmail(String email) { 
            this.email = email; 
        } 

[java] view plaincopy
@Test 
public void testObject() { 
    Info info = new Info(); 
    info.setId(1); 
    info.setName("allan"); 
    info.setEmail("tom@tom.com"); 
    try { 
        JAXBContext context = JAXBContext.newInstance(Info.class); 
        Marshaller marshal = context.createMarshaller(); 
        StringWriter writer = new StringWriter(); 
        marshal.marshal(info, writer); 
        System.out.println(writer); 
 
        Unmarshaller unMarshal = context.createUnmarshaller(); 
        StringReader reader = new StringReader(writer.toString()); 
        Info content = (Info) unMarshal.unmarshal(reader); 
        System.out.println("ID:" + content.getId() + "\n名字:" 
                + content.getName() + "\nemail:" + content.getEmail()); 
    } catch (JAXBException e) { 
        e.printStackTrace(); 
    } 


上面一段是JavaBean和XML的相互转换,传递了一个Info.class,这个Info不是一般的普通的bean。除了它带有getter、setter方法外,还有Annotation注解。

上面的XmlRootElement是设置当前对象转换成xml后的根节点,name的值是设置根节点的名称。在getter方法上设置XmlElement表示这个方法对应的属性是一个xml元素,如果这个注解还设置了name,那么这个name就是转换后xml的名称。在一个属性上设置XmlAttribute,表示这个方法对应的属性在转换xml后是父元素的一个属性。XmlAttribute的name就是转换后xml的属性的name。



[java] view plaincopy
@XmlRootElement(name="list-beans") 
public class ListBean { 
 
    private List<Object> list; 
    private String name; 
     
    @XmlElements({ 
        @XmlElement(name="bean",type=Info.class) 
    }) 
    public List<Object> getList() { 
        return list; 
    } 
    public void setList(List<Object> list) { 
        this.list = list; 
    } 
    @XmlAttribute 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 

[java] view plaincopy
@Test 
public void testList() { 
    List<Object> list = new ArrayList<Object>(); 
    Info info = new Info(); 
    info.setId(1); 
    info.setName("allan"); 
    info.setEmail("tom@tom.com"); 
    Info info2 = new Info(); 
    info2.setId(2); 
    info2.setName("allan2"); 
    info2.setEmail("tom2@tom.com"); 
    list.add(info); 
    list.add(info2); 
    ListBean listBean = new ListBean(); 
    listBean.setName("list to xml"); 
    listBean.setList(list); 
    try { 
        JAXBContext context = JAXBContext.newInstance(ListBean.class); 
        Marshaller marshal = context.createMarshaller(); 
        StringWriter writer = new StringWriter(); 
        marshal.marshal(listBean, writer); 
        System.out.println(writer); 
 
        Unmarshaller unMarshal = context.createUnmarshaller(); 
        StringReader reader = new StringReader(writer.toString()); 
        ListBean content = (ListBean) unMarshal.unmarshal(reader); 
        System.out.println(content.getName()); 
    } catch (JAXBException e) { 
        e.printStackTrace(); 
    } 


上面一段是List和XML的相互转换

XmlElements表示是一个集合类型,然后注解在集合中存放上面类型的对象。

XmlElement表示在集合中存放的一个对象类型和元素名称。



[java] view plaincopy
@XmlRootElement(name="map-beans") 
public class MapBean { 
 
    Map<String,Info> map; 
 
    @XmlJavaTypeAdapter(MapAdapter.class) 
    public Map<String, Info> getMap() { 
        return map; 
    } 
 
    public void setMap(Map<String, Info> map) { 
        this.map = map; 
    }    



[java] view plaincopy
public class MapElement { 
    /*@XmlElement
    public String key;
    @XmlElement
    public Info value;
    public MapElement() {       
    }
    public MapElement(String key, Info value) {
        super();
        this.key = key;
        this.value = value;
    }*/ 
    private String key; 
    private Info value; 
    private MapElement() { 
         
    } 
    public MapElement(String key, Info value) { 
        super(); 
        this.key = key; 
        this.value = value; 
    } 
    @XmlElement 
    public String getKey() { 
        return key; 
    } 
    public void setKey(String key) { 
        this.key = key; 
    } 
    @XmlElement 
    public Info getValue() { 
        return value; 
    } 
    public void setValue(Info value) { 
        this.value = value; 
    }    


[java] view plaincopy
public class MapAdapter extends XmlAdapter<MapElement[],Map<String,Info>>{  
    @Override 
    public Map<String, Info> unmarshal(MapElement[] param) throws Exception { 
        Map<String, Info> map=new HashMap<String, Info>();       
        for (MapElement element:param) { 
            //map.put(element.key, element.value); 
            map.put(element.getKey(), element.getValue()); 
        } 
        return map; 
    } 
 
    @Override 
    public MapElement[] marshal(Map<String, Info> param) throws Exception { 
        MapElement[] element=new MapElement[param.size()]; 
        int i=0; 
        for (Map.Entry<String, Info> entry: param.entrySet()) { 
            element[i++]=new MapElement(entry.getKey(),entry.getValue()); 
        } 
        return element; 
    } 



[java] view plaincopy
@Test 
public void testMap() { 
    MapBean mapBean = new MapBean(); 
    Info info = new Info(); 
    info.setId(1); 
    info.setName("allan"); 
    info.setEmail("tom@tom.com"); 
    Info info2 = new Info(); 
    info2.setId(2); 
    info2.setName("allan2"); 
    info2.setEmail("tom2@tom.com"); 
    Map<String, Info> map = new HashMap<String, Info>(); 
    map.put("NO1", info); 
    map.put("NO2", info2); 
    mapBean.setMap(map); 
    try { 
        JAXBContext context = JAXBContext.newInstance(MapBean.class); 
        Marshaller marshal = context.createMarshaller(); 
        StringWriter writer = new StringWriter(); 
        //按照jaxb的格式输出 
        marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);                            marshal.marshal(mapBean, writer); 
        System.out.println(writer); 
 
        Unmarshaller unMarshal = context.createUnmarshaller(); 
        StringReader reader = new StringReader(writer.toString()); 
        MapBean content = (MapBean) unMarshal.unmarshal(reader); 
        System.out.println(content.getMap().size()); 
    } catch (JAXBException e) { 
        e.printStackTrace(); 
    } 


上面的map集合的getter方法有一个XmlJavaTypeAdapter,需要传递一个Adapter的类型。

完整代码下载地址:http://download.csdn.net/detail/allan_chan/3931401
分享到:
评论

相关推荐

    JAXB技术实现xml与java对象互相转化代码教程

    使用java jdk的JAXB技术实现xml与java对象互相转化代码教程: JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB) •JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 •Marshaller接口,将Java...

    JAXB与xml相互转换实例

    Java Architecture for XML Binding(JAXB)是Java平台上的一个标准技术,它允许开发者在XML文档和Java对象之间进行无缝转换。这项技术的核心理念是通过自动的编译过程,将XML Schema(XSD)定义的数据结构映射为...

    通过JAXB实现完成java对象和xml的互相转换

    在本文中,我们将深入探讨如何使用JAXB实现Java对象与XML的互相转换。 首先,我们需要理解JAXB的基本工作原理。JAXB基于Java注解,这些注解用于标记Java类和它们的属性,以便JAXB知道哪些元素和属性应该映射到XML中...

    JAVA JAXB 解析XML嵌套子节点为字符串

    在Java开发中,JAXB(Java Architecture for XML Binding)是一个标准的API,用于将XML文档与Java对象之间进行互相转换。这个技术对于处理XML数据,尤其是解析和生成XML文档非常有用。当我们面临XML文档中存在嵌套子...

    jaxb xml 转map

    在Java世界中,JAXB(Java Architecture for XML Binding)是一个标准的API,用于将XML文档与Java对象之间进行互相转换。这个过程被称为对象绑定。在处理XML数据时,JAXB提供了一种方便的方式,让我们可以将XML数据...

    用JAXB生成一个XML

    通过这种方式,可以有效地实现XML数据和Java对象之间的相互转换,极大地简化了基于XML的应用程序的开发过程。需要注意的是,在实际应用中可能还需要考虑更多的细节和异常处理,但本文所介绍的基础知识已经足够让你...

    使用JAXB完成JAVAbean与xml互转

    Java Architecture for XML Binding (JAXB) 是Java平台上的一个标准技术,它允许在Java对象(如JavaBeans)和XML文档之间进行互相转换。这个过程被称为对象绑定,它简化了XML数据的处理,使得开发人员无需手动编写...

    xml和bean之间的相互转换源码

    在Java开发中,XML(可扩展标记语言)和Bean之间的相互转换是常见的操作,尤其是在处理配置文件、数据持久化或Web服务时。这里的"bean"通常指的是JavaBeans,即符合特定设计模式的Java对象,它们封装了数据并提供了...

    java对象与xml的互相转换

    总结一下,Java对象与XML之间的转换主要依赖于JAXB框架。通过定义Java类和使用JAXB提供的`Marshaller`和`Unmarshaller`,我们可以方便地在Java对象和XML文档之间进行互换。对于更复杂的场景,例如Web服务交互,可能...

    JAXB的 eclipse插件

    总结一下,JAXB的Eclipse插件是Java开发者处理XML数据的强大工具,它集成了XML Schema与Java类的相互转换、源代码编辑支持以及调试等功能。通过利用这些插件,开发者可以更加高效地进行XML相关的开发工作,实现Java...

    Java XML绑定技术 (Castor JAXB XMLBeans)

    它是Java EE标准的一部分,提供了一种机制来将Java对象与XML文档相互转换。使用JAXB,可以通过简单的API调用来序列化和反序列化Java对象为XML文档,反之亦然。 **特点:** - **简单易用**:只需在Java类上添加一些...

    XML JAXB入门示例

    JAXB(Java Architecture for XML Binding)是Java平台标准中的一个部分,它提供了一种将Java对象和XML文档之间进行互相转换的机制。通过JAXB,开发者可以方便地在Java对象和XML之间进行序列化和反序列化操作,极大...

    xml和bean 互相转换

    在Java开发中,XML(可扩展标记语言)和Bean之间的互相转换是一项常见的任务,尤其是在处理配置文件、数据交换或者序列化场景中。本篇将详细阐述XML与Bean之间的转换过程,以及相关的Java技术。 首先,XML是一种...

    Object-XML文件的相互转换分析

    在Spring中,我们还可以利用`@XmlElement`、`@XmlAttribute`、`@XmlElementRef`等JAXB注解进一步定制对象与XML之间的映射。此外,Spring还支持使用`&lt;bean&gt;`标签自定义bean的属性和依赖关系,使得XML配置更加灵活。 ...

    javabean和xml互相转换工具类以及jar包

    JavaBean和XML之间的转换在软件开发中扮演着重要的角色,特别是在数据交换和接口通信中。当我们需要在不同的系统之间传递信息时,XML由于其结构化和可读性,经常被用作数据传输的标准格式。然而,JavaBean是Java中...

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

    JAXB (Java Architecture for XML Binding) 是Java平台上的一个标准,它允许开发人员将XML文档与Java对象之间进行绑定,从而实现XML数据的序列化和反序列化。Jaxb2是JAXB的一个版本,从JDK 1.6开始成为其内置组件,...

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

    在这个"JAXBContext测试Java对象与xml的相互转换Demo"中,我们将深入探讨如何利用JAXBContext实现这一功能。 首先,我们需要定义一个Java类,这个类将被映射为XML文档的元素。例如,我们可以创建一个`Person`类,...

    access ,sqlserver,oracle,mysql与xml之间的相互转换

    在标题提到的"access, sqlserver, oracle, mysql与xml之间的相互转换"中,我们探讨的是如何使用编程语言(在这个案例中是Java)来实现在不同数据库系统和XML数据格式间的转换。XML(eXtensible Markup Language)是...

Global site tag (gtag.js) - Google Analytics