`
donald3003a
  • 浏览: 65684 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
  • 淼淼E馒头: 这举列有点不恰当啊。。电影人和不同类型的电影。是两个不同概念 ...
    合成模式

使用JAXB 转化bean(支持map对象)

 
阅读更多
jaxb可以使用XmlAdapter来定义复杂对象。
Map是我们经常用的对象所以下面演示下怎么使用
1、beans里面包含一个map对象,bean对象不发生变化
@XmlRootElement(name = "beans", namespace = "http://www.example.org/studyframework_0.1")
@XmlAccessorType(XmlAccessType.NONE)
public class Beans {

	@XmlElement(name = "bean")
	@XmlJavaTypeAdapter(MapAdapter.class)
	private Map<String, Bean> beanMap;

	public Map<String, Bean> getBeanMap() {
		return beanMap;
	}

	public void setBeanMap(Map<String, Bean> beanMap) {
		this.beanMap = beanMap;
	}

}

2、添加MapAdapter对象
public class MapAdapter extends XmlAdapter<Bean[], Map<String, Bean>> {
	@Override
	public Bean[] marshal(Map<String, Bean> map) throws Exception {
		Bean[] Beans = new Bean[map.size()];
		int i = 0;
		Iterator<Entry<String, Bean>> it = map.entrySet().iterator();
		while (it.hasNext()) {
			Beans[i] = new Bean();
			Entry<String, Bean> entry = it.next();
			Beans[i].setId(entry.getKey());
			Beans[i].setClassName(entry.getValue().getClassName());
			i++;
		}
		return Beans;
	}

	@Override
	public Map<String, Bean> unmarshal(Bean[] arg0) throws Exception {
		Map<String, Bean> map = new HashMap<String, Bean>();
		for (Bean bean : arg0) {
			Bean newBean = new Bean();
			newBean.setId(bean.getId());
			newBean.setClassName(bean.getClassName());
			map.put(bean.getId(), newBean);
		}
		return map;
	}
}

这个类就可以使用户自己定义复杂对象,简单说明下
先说下这个范式
XmlAdapter<Bean[], Map<String, Bean>>
第1个Bean代表生成xml对象
MAP<String,Bean>代表从xml获取回来的对象
marshal方法就是把MAP对象转化为Bean[]
unmarshal把xml中的Bean[]转化为Map对象

3、调用方法如下
	@Test
	public void testMarshallerByJaxb() throws Exception {
		Beans beans = new Beans();
		HashMap<String, Bean> map = new HashMap<String, Bean>();
		Bean beanOne = new Bean();
		beanOne.setClassName("testClassOne");
		beanOne.setId("testIdOne");
		Bean beanTwo = new Bean();
		beanTwo.setClassName("testClassTwo");
		beanTwo.setId("testIdTwo");
		map.put("testIdOne", beanOne);
		map.put("testIdTwo", beanTwo);
		beans.setBeanMap(map);
		XMLTransformed.marshallerByJaxb("test.xml", beans, Beans.class);
	}

	public void testUnmarshallerByJaxb() throws Exception {
		Beans actual = (Beans) XMLTransformed.unmarshallerByJaxb("test.xml", Beans.class);
		Assert.assertEquals("testClassOne", actual.getBeanMap().get("testIdOne").getClassName());
	}
分享到:
评论

相关推荐

    利用jaxb实现xml和bean互转

    例如,一个Web服务可能接收XML请求,然后使用JAXB将其转换为Java对象进行处理,最后再将结果转换为XML响应。 **五、示例代码** ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; ...

    jaxb xml 转map

    在实际应用中,我们可能会使用第三方库,如Apache Commons BeanUtils的`BeanMap`或Google的Gson库,来帮助简化XML到Map的转换过程。然而,JAXB并不直接支持将XML转换为Map,因此我们需要自己实现上述逻辑。 ...

    使用jaxb将XML转化为JAVA BEAN

    JAXB基于Java反射机制,通过在Java类上使用特定的注解(如@XmlRootElement、@XmlElement等),JAXB可以自动地将这些类实例序列化为XML文档,或者将XML文档反序列化为Java对象。这个过程分为两个主要步骤: ...

    jaxb XMl和BEAN互转实例(内含jar包)

    在给定的"jaxb XMl和BEAN互转实例(内含jar包)"中,我们有一个实用工具类,它简化了使用JAXB进行XML与BEAN对象之间转换的过程。 在Java编程中,BEAN通常指的是符合JavaBeans规范的简单Java类,它们通常包含getter...

    jaxb xml转化为对象,对象转化为xml,xml转化为xsd,表转化为对象

    当我们需要将Java对象的数据以XML格式输出时,JAXB使用`Marshaller`接口实现对象到XML的序列化。只需提供Java对象和输出目的地(如文件、流或字符串),`Marshaller.marshal()`方法就会自动生成相应的XML文档。 接...

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

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

    各种转换,xml,实体bean,动态bean,map等

    在Java中,我们可以使用JAXB(Java Architecture for XML Binding)进行XML与Java对象之间的双向绑定,或者使用DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等API来...

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

    - **处理复杂类型**:JAXB支持处理嵌套的Java类和数组,以及自定义类型。 - **定制序列化和反序列化行为**:可以通过实现`XmlAdapter`接口来自定义转换逻辑。 - **处理命名空间**:使用`@XmlSchema`注解可以指定XML...

    java 使用 JAXB 将xml转换为 bean 包含xml和dto和读取文件的util类

    总结来说,这个压缩包提供的内容涉及了Java中使用JAXB进行XML与Java对象之间转换的实际应用,以及辅助的DTO和文件读取工具。这些对于理解和实现XML数据处理的Java应用非常有帮助。开发者可以通过学习和使用这些示例...

    webservice之使用jaxb把xml转换Object或把对象转换成xml文件

    在Java世界中,使用JAXB(Java Architecture for XML Binding)库可以方便地实现XML数据与Java对象之间的转换,从而在WebService中轻松处理数据交换。本篇文章将深入探讨如何使用JAXB进行XML到Object以及Object到XML...

    jaxb和jackson的jar

    本文将深入探讨这两个库以及它们如何与Java Bean和Map对象进行交互。 **JAXB简介** JAXB是Java标准,它提供了从Java对象到XML和从XML到Java对象的自动转换能力。通过使用JAXB,开发者可以避免手动编写XML解析和生成...

    JAXBUtil使用JAXB进行xml和bean互转

    JAXB(Java Architecture for XML Binding)是Java平台的一个标准API,它提供了一种自动化的机制,用于在XML文档和Java对象之间进行映射和转换。本篇文章将深入探讨如何使用JAXBUtil来实现XML和bean之间的互转,并...

    JAXB工具类 xml转为java对象 java对象转为xml

    Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准API。它使得在Java应用程序中使用XML数据变得更加方便,无需手动编写大量的转换代码。本教程将详细介绍JAXB如何实现...

    Android支持JAXB(Java Architecture for XML Binding)

    Android支持JAXB(Java Architecture for XML Binding) JAXB(Java Architecture for XML Binding)是Java领域中的一项标准技术,能够根据XML Schema生成Java类,并将XML实例文档反向生成Java对象树。JAXB提供了将...

    android上使用 jaxb所需要的包

    总的来说,虽然Android原生不支持JAXB,但通过引入相应的jar包,开发者仍然可以利用JAXB的强大功能,实现XML数据与Java对象之间的灵活转换,从而提升应用的数据处理能力。不过,需要注意的是,由于额外的库可能会...

    用jaxb 实现 xml转java对象技术

    以下是一个简单的例子,展示如何使用JAXB进行XML到Java对象的转换: ```java import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "student...

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

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

    JAXB完成XML和Java对象的互转

    该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用...

    如何使用JAXB框架定制Web服务行为.doc

    JAXB(Java Architecture for XML Binding)是Java平台上用于XML Schema和Java对象之间绑定的标准框架,它简化了XML数据与Java应用程序之间的交互。JAXB允许开发者将XML文档转换为Java对象,反之亦然,使得处理XML...

    cxf-webservice复杂类型

    例如,Map对象不能直接映射到XML元素,因为XML Schema不支持动态属性的直接表示。 2. **自定义数据类型**:对于像Map这样的复杂类型,开发者可以创建自定义的数据类型来映射XML元素。这通常涉及到创建一个Java类,...

Global site tag (gtag.js) - Google Analytics