一、简介
1、概念是什么:(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。是一种xml与object映射绑定技术标准,既然是标准就可以有不同实现.
2、JAXB中有什么:包含“xjc”工具和一个“schemagen”工具。
“xjc”工具可以用来将XML模式或其他类型模式文件(Java 1.6试验性地支持RELAX NG,DTD以及WSDL)转换为Java类。Java类使用javax.xml.bind.annotation包下的Java 标注,例如@XmlRootElement和@XmlElement。XML列表序列表示为java.util.List类型的属性, 通过JAXBContext可以创建Marshallers(将Java对象转换成XML)和Unmarshallers(将XML解析为Java对象)。 另外的“schemagen”工具,能够执行“xjc”的反向操作,通过一组标注的Java类创建一个XML模式。
二、JDK5以下开发需要的jar包:activation.jar、jaxb-api.jar、 jaxb-impl.jar、 jsr173-api.jar; 如果是基于JDK6以上版本已经集成JAXB2的JAR,在目录{JDK_HOME}\jre\lib\rt.jar中。
三、标注相关
注意:
1、注解可在属性定义上,也可在getter()方法上,最好在方法上注解,修饰属性用private,方法是public,属性注解可能会出现问题(如:JAXB “Class has two properties of the same name”)。
2、对象中的属性可以不全部映射到xml中,xml中出现的元素也不一定与映射的实体一一对应,映射的双方可以灵活对应
3、类上注解后,类中元素也默认按默认名称映射,但是对象属性名称与xml节点元素名称不一致时或者不需要显示在xml节点中时,则必须做对应的映射配置。
4、注解实例:映射一般分分:类名与xml根节点的映射、普通属性与xml节点的映射、集合与xml中包含子元素的节点的映射。
/**
*转换为xml的实体类
*/
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
//类注解,一个类最多可以有一个根元素
@XmlRootElement(name="Property")
public class Property {
private String sequence;
private Integer styleId;
private String elementName;
private String entityField;
//普通属性
@XmlElement
public String getSequence() {
return sequence;
}
public void setSequence(String sequence) {
this.sequence = sequence;
}
@XmlElement
public Integer getStyleId() {
return styleId;
}
public void setStyleId(Integer styleId) {
this.styleId = styleId;
}
@XmlElement
public String getElementName() {
return elementName;
}
public void setElementName(String elementName) {
this.elementName = elementName;
}
@XmlElement
public String getEntityField() {
return entityField;
}
public void setEntityField(String entityField) {
this.entityField = entityField;
}
}
/**
*包含上面对象实体的类
*/
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Resouce {
private String picLarge;
private List<Property> Properties;
@XmlElement
public String getPicLarge() {
return picLarge;
}
public void setPicLarge(String picLarge) {
this.picLarge = picLarge;
}
// 如果想在节点外面包一层xml元素节点,可以用
// @XmlElementWrapper(name="wrapper" )
@XmlElements( {
@XmlElement(name = "Property", type = Property.class),
// @XmlElement(name = "adInfo", type = AdInfo.class)一个集合可以放置多个xml元素名称和对象类型、在xml中是相互独立的集合元素,无包含关系
})
public List<Property> getProperties() {
return Properties;
}
public void setProperties(List<Property> properties) {
Properties = properties;
}
public static void main(String [] args){
Property property = new Property();
property.setElementName("elementName");
property.setEntityField("entityField");
property.setSequence("sequence");
property.setStyleId(11111);
Property property1 = new Property();
property1.setElementName("elementName111");
property1.setEntityField("entityField111");
property1.setSequence("sequence1111");
property1.setStyleId(22222);
List<Property> list = new ArrayList<Property>();
list.add(property);
list.add(property1);
Resouce resouce = new Resouce();
resouce.setPicLarge("picLarge");
resouce.setProperties(list);
JAXB2Tester.bean2Xml(resouce);
}
}
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
/**
*xml与JAVA对象相互转化
*/
public class JAXB2Tester {
/**
* 将生成的xml转换为对象
* @param zClass 转换为实例的对象类类型
* @param xmlPath 需要转换的xml路径
*/
public static Object xml2Bean(Class<?> zClass, String xml) {
Object obj = null;
JAXBContext context = null;
if (null == xml || "".equals(xml) || "null".equalsIgnoreCase(xml)
|| xml.length() < 1)
return obj;
try {
context = JAXBContext.newInstance(zClass);
// if without "utf-8", Invalid byte 2 of 2-byte UTF-8 sequence.
InputStream iStream = new ByteArrayInputStream(xml.getBytes("utf-8"));
Unmarshaller um = context.createUnmarshaller();
obj = (Object) um.unmarshal(iStream);
return obj;
} catch (JAXBException e) {
e.printStackTrace();
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return obj;
}
public static String bean2Xml(Object bean) {
String xmlString = null;
JAXBContext context;
StringWriter writer;
if (null == bean)
return xmlString;
try {
//下面代码将对象转变为xml
context = JAXBContext.newInstance(bean.getClass());
Marshaller m = context.createMarshaller();
writer = new StringWriter();
m.marshal(bean, writer);
xmlString = writer.toString();
System.out.println(xmlString);
return xmlString;
} catch (Exception e) {
e.printStackTrace();
}
return xmlString;
}
}
分享到:
相关推荐
#### 一、JAXB2简介 JAXB(Java Architecture for XML Binding)是一种用于处理XML数据的技术,它提供了一种将Java对象与XML文档相互转换的方法。随着Java技术的发展,JAXB也进行了版本迭代,从JAXB1.x升级到了JAXB2...
Jaxb2简介\n\nJaxb2是Java Architecture for XML Binding的第二版,它是Java平台的标准组件,包含在JDK中。Jaxb2利用注解(Annotation)和泛型(GenericType)等新特性,使得Java对象与XML文档的映射变得更加简单和...
总结来说,`jaxb-api-2.1.9.jar` 是Java开发中处理XML数据的重要工具,它提供了方便的数据绑定机制,简化了XML文档和Java对象之间的交互。在实际开发中,JAXB常常与其他Java EE技术配合,实现复杂的数据处理和业务...
在Java SE 6及更高版本中,JAXB已经成为核心API的一部分,使得开发人员可以方便地处理XML数据,无需深入理解XML的复杂性。本学习资料主要涵盖了JAXB 2.0版本,这是JAXB的一个重要里程碑,引入了诸多改进和新特性。 ...
总结来说,JAXB是Java中处理XML的强大工具,通过学习JAXB的HelloWorld源码,新手可以快速上手,理解XML和Java对象之间的绑定,以及如何进行序列化和反序列化操作。随着对JAXB的深入理解和实践,开发人员能够更高效地...
【JAVA6新特性:JAXB简介】 Java Architecture for XML Binding(JAXB)是Java平台上的一个标准技术,它提供了一种方便的对象与XML之间的映射机制。在Java 6中,JAXB已经成为Java Standard Edition(Java SE)的一...
JAXB2.0是JAXB规范的第二个主要版本,引入了许多新特性,如注解支持、XML Schema绑定等。相比于JAXB1.0,2.0版本提供了更加简洁和直观的API,使得开发人员无需编写大量的XML绑定文件(如bindings.xjb)就能完成XML和...
**JAXB(Java Architecture for XML ...总结来说,JAXB是一种强大的Java XML处理技术,而XMLSPY作为一个全面的XML工具,是开发和调试XML相关项目的好帮手,尤其在配合JAXB使用时,可以大大提高开发效率和代码质量。
Java Architecture for XML Binding ...总结来说,JAXB是一个强大的工具,使得Java开发者能够方便地处理XML数据,简化了数据交换和序列化的复杂性。了解和熟练使用JAXB,可以显著提高XML相关项目的效率和可维护性。
这个名为"ae-jaxb.zip"的压缩包显然包含了针对Android平台的JAXB实现及相关资源,方便开发者在Android项目中集成和使用。 JAXB是Java标准版(Java SE)的一部分,但在Android平台上并不是默认支持的,因为Android ...
二、JAXB2(JSR 222)对象-XML 映射 1. JAXB 提供了对象与XML之间的自动转换,极大地简化了XML处理: - 在JDK 1.6中,JAXB 2.0被引入Java SE,它使用注解(Annotation)标记需要绑定的类和属性。 - 通过注解如`@...
总结来说,Piccolo2D是一个强大的Java 2D图形库,其核心库和扩展库共同提供了丰富的功能,如自定义绘图、视图滚动、事件处理等,适用于各种需要复杂2D图形界面的Java应用程序。在使用ScrollView.jar时,必须确保依赖...
**总结** JPA-XJC插件为JAXB和JPA的结合提供了一个实用的工具,使得XML模式文件可以直接生成符合JPA规范的Java类。通过利用这个插件,开发者可以更加高效地管理ORM过程,提高开发效率,同时保持代码的标准化和可...
用户可以通过官方文档学习如何配置Axis2、创建服务、调用服务以及使用各种特性。此外,社区论坛和邮件列表也是获取问题解答和支持的重要资源。 ### Axis2与其他技术的集成 - **WS-Security**: 支持WS-Security标准...
1. **Axis2简介** Axis2是第二代的Apache SOAP引擎,它在Axis1的基础上进行了很多改进,提供了更好的性能和灵活性。Axis2支持SOAP 1.1和1.2,同时对RESTful服务也有良好的支持。它采用了模块化设计,允许用户根据...
JAXB的自动化特性使得处理复杂的XML结构变得简单,但同时也可能导致代码过于依赖于XML结构。 **SAX** SAX(Simple API for XML)是一种事件驱动的解析方式,它不创建整个XML文档的内存表示,而是按需处理XML事件。...
总结起来,"axis2_jar包(1)"是开发和运行基于Axis2的Web服务的关键组成部分。了解这些jar文件的功能和用途,有助于开发者更有效地利用Axis2框架进行服务开发和部署。在实际项目中,可以根据需求选择合适的模块和配置...
Axis2是Apache软件基金会开发的一个开放源码的Web服务平台,专门用于构建高效、可扩展且灵活的Web服务。...理解并熟练使用Axis2,可以帮助开发者高效地构建和部署Web服务,同时利用其丰富的特性来满足各种业务需求。
**1.1 Axis2简介** Axis2是由Apache组织维护的一个开源项目,它是一个基于Java的Web服务引擎,旨在提供高效、灵活且易于使用的Web服务解决方案。相比于其前身Axis1.x,Axis2进行了全面的重设计,提供了更多的特性和...