`

JAXBのMap wih XmlAdapter

    博客分类:
  • JAXB
 
阅读更多
We usually use List<Item> it is complete support.
and We also usually use Map<item.id,Item>, this hasn't original support.

package ycl.learn.xml.jaxb.map;

import java.util.HashMap;
import java.util.Map;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;


@XmlRootElement
public class Employee {
	  
	
	@XmlJavaTypeAdapter(MapRealXmlAdapter.class)
	@XmlElement(name="familys")
	public Map<String,Family> familiesmap = new HashMap<String,Family>();
	 
}


package ycl.learn.xml.jaxb.map;

import javax.xml.bind.annotation.XmlAttribute;

 

public class Family {

	private String name;
	private String value;  
	@XmlAttribute
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@XmlAttribute
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	 
	 
	public String toString(){
		return name+":"+value;
	}
	
}



package ycl.learn.xml.jaxb.map;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlMixed;
import javax.xml.bind.annotation.adapters.XmlAdapter;

public class MapRealXmlAdapter extends XmlAdapter<MapRealXmlAdapter.AdaptedHashMap,Map<String,Family>> {
  
	
	@Override
	public AdaptedHashMap marshal(Map<String,Family> v) throws Exception {
		AdaptedHashMap adaptedMap = new AdaptedHashMap();
	        for(Map.Entry<String,Family> entry : v.entrySet()) {
	        	adaptedMap.getFamily().add(entry.getValue());
	        }
	        return adaptedMap;

	}

	@Override
	public Map<String,Family> unmarshal(AdaptedHashMap v) throws Exception { 
		Map<String, Family> mappings = new HashMap<String, Family>();
        for(Family mapping : v.getFamily()) {
            mappings.put(mapping.getName(), mapping);
        }
        return mappings;
	}
	 
	public static class AdaptedHashMap{ 
		 
		
		private List<Family> family = new ArrayList<Family>();

		@XmlElement(name="family")
		public List<Family> getFamily() {
			return family;
		}

		public void setFamily(List<Family> family) {
			this.family = family;
		} 
		
		
	}  


}



package ycl.learn.xml.jaxb.map;

import java.io.File;
import java.io.FileNotFoundException;

import javax.xml.bind.JAXBException;

import ycl.learn.xml.jaxb.JAXBUtil;

public class JAXBUtilTest { 
	
	private static final String FILE_NAME_emps = "employees.xml";
	private static final String FILE_NAME_emps_copy = "employees_copy.xml";
	/**
	 * @param args
	 * @throws JAXBException 
	 * @throws FileNotFoundException 
	 */
	public static void main(String[] args) throws FileNotFoundException, JAXBException { 
		
		JAXBUtil<Employee> ju = new JAXBUtil<Employee>(); 
		Employee empant = ju.unmarshal(Employee.class, new File(FILE_NAME_emps));
		System.out.println("reader success lll000"); 
		//System.out.println(empant.family);
		System.out.println(empant.familiesmap);
		ju.marshal(empant, new File(FILE_NAME_emps_copy)); 
	}

}



<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
	<familys>
		<family name="a"></family>
		<family name="b" value="ccc"></family>
		<family name="c" value="cccc" extendss="a"></family>
	</familys>
</employee>


this can be marshal and unmarshal this familys to map/ot xml.
but the export xml is

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<employee>
	<familys>
		<family value="ccc" name="b" />
		<family value="cccc" name="c" />
		<family name="a" />
	</familys>
</employee>


there is the difference is the order, we know the map has no order, but the key's hascode.
so If we want to export the order datas, we can do two ways.
one way:
1. rewrite the key's compared method.
2. use sortedHashMap.
分享到:
评论

相关推荐

    jaxb xml 转map

    本话题我们将深入探讨如何使用JAXB将XML转换为Map。 XML是一种结构化数据表示方式,广泛用于数据交换和配置文件。而Map是Java中的一种数据结构,它将键(Key)与值(Value)关联起来,提供快速查找和存储。将XML...

    JAXB的 eclipse插件

    JAXB(Java Architecture for XML Binding)是Java平台上的一个标准,它提供了一种在Java对象和XML文档之间进行映射的机制。Eclipse作为一款强大的Java集成开发环境,为开发者提供了丰富的插件支持,其中包括JAXB的...

    JAXB2 jaxb-api.jar jaxb-xjc.jar jaxb-impl.jar activation.jar

    JAXB2,全称为Java Architecture for XML Binding 2,是Java平台上的一个标准技术,用于在XML和Java对象之间进行绑定。它允许开发者通过简单的API将XML文档转换为Java对象,反之亦然,大大简化了XML数据处理。JAXB2...

    javax.rar(jaxb-impl-2.3.0、jaxb-core-2.3.0、jaxb-api-2.3.0)

    标题中的"jaxb-impl-2.3.0、jaxb-core-2.3.0、jaxb-api-2.3.0"是JAXB的不同组件版本号,它们在处理XML到Java对象之间的转换时起到关键作用。在描述中提到的“Maven项目中缺少jaxb-api的异常报错”,通常指的是在运行...

    JAXB的安装包及插件

    **JAXB(Java Architecture for XML Binding)** 是Java平台中用于XML到Java对象绑定的API,它是Java EE和Java SE标准的一部分,允许开发者在Java应用程序中方便地将XML数据转换为Java对象,反之亦然。这个过程极大...

    jaxb和jackson的jar

    3. **JAXB与Map**:虽然JAXB不是设计用来处理Map的,但通过自定义marshaller和unmarshaller,可以实现Map到XML的转换。这个过程相对复杂,需要编写额外的代码。 4. **Jackson与Map**:Jackson对Map的支持更加友好。...

    jaxb-api-2.1.jar 和 jaxb-impl-2.1.8.jar

    `jaxb-api-2.1.jar` 和 `jaxb-impl-2.1.8.jar` 是Java应用程序中用于XML绑定(Java Architecture for XML Binding,简称JAXB)的重要库文件。JAXB是Java SE和Java EE平台的标准部分,它提供了一种将XML文档与Java...

    jaxb生成XML例子

    适配器需要扩展`XmlAdapter`并重写`marshal()`和`unmarshal()`方法。 8. **@XmlAccessorType(XmlAccessType.PROPERTY)**: 与`FIELD`相反,`PROPERTY`表示JAXB将根据getter和setter方法来绑定属性,而不是直接访问...

    jaxb-api jaxb-impl jar

    `jaxb-api`和`jaxb-impl`是JAXB框架的核心组成部分。这两个JAR文件在处理XML到Java对象的绑定过程中扮演着关键角色。 1. **jaxb-api.jar**: 这个库包含了JAXB API,即Java接口和抽象类,定义了JAXB的工作方式。它...

    activation.jar jaxb1-impl.jar jaxb-api.jar jaxb-impl.jar jaxb-xjc.jar jsr173_1.0

    这些文件是Java编程环境中常用的库文件,主要用于XML绑定(Java Architecture for XML Binding,JAXB)和JavaBeans Activation Framework(JAF)。在Java应用程序开发中,尤其是处理XML数据时,这些库扮演着至关重要...

    jaxb2.3.0依赖jar.rar

    Java Architecture for XML Binding (JAXB) 是Java平台中用于XML到Java对象绑定的标准技术,它允许开发者在Java程序中直接操作XML数据,而无需编写大量的XML解析和序列化代码。JAXB 2.3.0是该技术的一个版本,包含了...

    jaxb-impl.jar jaxb-api.jar jsr173_1.0_api.jar

    Java Architecture for XML Binding (JAXB) 是Java平台中用于XML数据绑定的标准库,它使得Java对象和XML文档之间可以进行无缝转换。在给定的压缩包文件中,包含了一些核心的JAXB组件以及相关的依赖库,如`jaxb-impl....

    最新JAXB解析XML教程

    这可以通过实现`XmlAdapter`接口来完成,它允许你控制XML元素和属性如何映射到Java类型。 7. **JAXB插件**: 在开发过程中,可能会使用到各种JAXB插件来增强其功能,例如,添加代码生成插件,可以在构建过程中自动...

    idea 中用jaxb 读xml中数据

    当我们需要处理XML文件,比如从XML中提取数据时,JAXB(Java Architecture for XML Binding)是一个强大的工具。本教程将详细解释如何在Idea中利用JAXB来读取XML文件中的数据。 JAXB是Java标准API,它提供了将Java...

    jaxb-api.jar.jaxws-api.zip_ jaxb-api.jar_cxf_jax-ws.jar_jaxb-api

    标题提到的"jaxb-api.jar.jaxws-api.zip_ jaxb-api.jar_cxf_jax-ws.jar_jaxb-api",是针对这个问题提供的一组支持包。 **JAXB(Java Architecture for XML Binding)** 是Java平台的一个标准,它允许开发者将XML文...

    jaxb api jar

    Java Architecture for XML Binding (JAXB) 是Java平台中用于XML数据绑定的标准API,它使得Java对象和XML文档之间可以进行无缝转换。`jaxb-api-2.1.9.jar` 是一个包含JAXB API的库文件,版本为2.1.9,用于支持开发...

    android上使用 jaxb所需要的包

    在Android平台上进行开发时,有时候我们需要处理XML数据,这时候JAXB(Java Architecture for XML Binding)就显得非常有用。JAXB是Java SDK中的一个标准API,它允许开发者将XML文档与Java对象之间进行自动的双向...

    JAXB乱码问题解决

    在Java开发中,JAXB(Java Architecture for XML Binding)是一个用于将XML文档和Java对象之间进行绑定的技术。在处理XML文件时,特别是涉及到序列化和反序列化时,可能会遇到字符编码问题,即所谓的“乱码”。这个...

    jaxb-api-2.2 jaxb-impl

    在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个错误,按照打出的信息Use the endorsed directory mechanism to place jaxb-api.jar in ...

Global site tag (gtag.js) - Google Analytics