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());
}
分享到:
相关推荐
在实际应用中,我们可能会使用第三方库,如Apache Commons BeanUtils的`BeanMap`或Google的Gson库,来帮助简化XML到Map的转换过程。然而,JAXB并不直接支持将XML转换为Map,因此我们需要自己实现上述逻辑。 ...
例如,一个Web服务可能接收XML请求,然后使用JAXB将其转换为Java对象进行处理,最后再将结果转换为XML响应。 **五、示例代码** ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; ...
JAXB基于Java反射机制,通过在Java类上使用特定的注解(如@XmlRootElement、@XmlElement等),JAXB可以自动地将这些类实例序列化为XML文档,或者将XML文档反序列化为Java对象。这个过程分为两个主要步骤: ...
在给定的"jaxb XMl和BEAN互转实例(内含jar包)"中,我们有一个实用工具类,它简化了使用JAXB进行XML与BEAN对象之间转换的过程。 在Java编程中,BEAN通常指的是符合JavaBeans规范的简单Java类,它们通常包含getter...
当我们需要将Java对象的数据以XML格式输出时,JAXB使用`Marshaller`接口实现对象到XML的序列化。只需提供Java对象和输出目的地(如文件、流或字符串),`Marshaller.marshal()`方法就会自动生成相应的XML文档。 接...
使用java jdk的JAXB技术实现xml与java对象互相转化代码教程: JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB) •JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 •Marshaller接口,将Java...
在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支持处理嵌套的Java类和数组,以及自定义类型。 - **定制序列化和反序列化行为**:可以通过实现`XmlAdapter`接口来自定义转换逻辑。 - **处理命名空间**:使用`@XmlSchema`注解可以指定XML...
总结来说,这个压缩包提供的内容涉及了Java中使用JAXB进行XML与Java对象之间转换的实际应用,以及辅助的DTO和文件读取工具。这些对于理解和实现XML数据处理的Java应用非常有帮助。开发者可以通过学习和使用这些示例...
在Java世界中,使用JAXB(Java Architecture for XML Binding)库可以方便地实现XML数据与Java对象之间的转换,从而在WebService中轻松处理数据交换。本篇文章将深入探讨如何使用JAXB进行XML到Object以及Object到XML...
本文将深入探讨这两个库以及它们如何与Java Bean和Map对象进行交互。 **JAXB简介** JAXB是Java标准,它提供了从Java对象到XML和从XML到Java对象的自动转换能力。通过使用JAXB,开发者可以避免手动编写XML解析和生成...
JAXB(Java Architecture for XML Binding)是Java平台的一个标准API,它提供了一种自动化的机制,用于在XML文档和Java对象之间进行映射和转换。本篇文章将深入探讨如何使用JAXBUtil来实现XML和bean之间的互转,并...
Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准API。它使得在Java应用程序中使用XML数据变得更加方便,无需手动编写大量的转换代码。本教程将详细介绍JAXB如何实现...
Android支持JAXB(Java Architecture for XML Binding) JAXB(Java Architecture for XML Binding)是Java领域中的一项标准技术,能够根据XML Schema生成Java类,并将XML实例文档反向生成Java对象树。JAXB提供了将...
总的来说,虽然Android原生不支持JAXB,但通过引入相应的jar包,开发者仍然可以利用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的基本工作原理。JAXB基于Java注解,这些注解用于标记Java类和它们的属性,以便JAXB知道哪些元素和属性应该映射到XML中...
该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用...
JAXB(Java Architecture for XML Binding)是Java平台上用于XML Schema和Java对象之间绑定的标准框架,它简化了XML数据与Java应用程序之间的交互。JAXB允许开发者将XML文档转换为Java对象,反之亦然,使得处理XML...
例如,Map对象不能直接映射到XML元素,因为XML Schema不支持动态属性的直接表示。 2. **自定义数据类型**:对于像Map这样的复杂类型,开发者可以创建自定义的数据类型来映射XML元素。这通常涉及到创建一个Java类,...