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转化为对象,对象转化为xml,xml转化为xsd,数据库表转化为对象
jaxb xml 转map
NULL 博文链接:https://ericxiong.iteye.com/blog/1003995
使用jaxb 实现xml——bean互转
jaxb XMl和BEAN互转实例(内含jar包),将jaxb封装成一个Util工具类,只需要通过对BEAN进行简单的注解就可以直接实现xml和bean之间的互转
JAXB的使用JAXB的使用JAXB的使用JAXB的使用
使用java jdk的JAXB技术实现xml与java对象互相转化代码教程: JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB) •JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 •Marshaller接口,将Java...
JAXB工具类 xml转为java对象 java对象转为xml ,本人亲测,可以使用!!!
JAXB框架,作用是对象和XML之间相互转化,本文档包含代码示例,介绍对象和XML如果使用JAXB相互转化 在代码里面备注了具体使用的文字说明
使用JAXB进行xml和bean互转,其中为一个简单的demo,包含转换工具类和一个简单的bean的定义,如果有多级节点需要定义多个bean,将子节点作为一个属性放置到主节点类中
NULL 博文链接:https://luyuwww.iteye.com/blog/1988355
该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用...
java -jar JAXB2_20060607.jar On Windows, you can just double-click the jar file to execute. Release Notes Browse the release notes online, including what's new. Technical Support Please subscribe to...
如何使用JAXB框架定制Web服务行为.doc
java 使用 JAXB 将xml转换为 bean 包含xml和dto和读取文件的util类
jaxb将xml转换为对象或将对象转换为xml。测试通过。
使用jaxb根据xsd生成xml文档,不要积分的,赶快下载
JAXB是jdk中集成的哟该来 xml和java 对象互相转换的工具,但是在android sdk中默认没有集成,需要自己添加相应的jar包
我刚写好的 一个简单的小程序 动行里面的read文件 是在idea 中用jaxb 读xml中数据
Jaxb annotation 使用 Jaxb annotation初步使用