`
ruzhefeng
  • 浏览: 2039 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

JAXB2简介及特性使用总结

阅读更多
一、简介

   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基础教程

    #### 一、JAXB2简介 JAXB(Java Architecture for XML Binding)是一种用于处理XML数据的技术,它提供了一种将Java对象与XML文档相互转换的方法。随着Java技术的发展,JAXB也进行了版本迭代,从JAXB1.x升级到了JAXB2...

    Jaxb2 开发指南

    Jaxb2简介\n\nJaxb2是Java Architecture for XML Binding的第二版,它是Java平台的标准组件,包含在JDK中。Jaxb2利用注解(Annotation)和泛型(GenericType)等新特性,使得Java对象与XML文档的映射变得更加简单和...

    jaxb api jar

    总结来说,`jaxb-api-2.1.9.jar` 是Java开发中处理XML数据的重要工具,它提供了方便的数据绑定机制,简化了XML文档和Java对象之间的交互。在实际开发中,JAXB常常与其他Java EE技术配合,实现复杂的数据处理和业务...

    JAXB 学习资料 作者个人总结和测试程序

    在Java SE 6及更高版本中,JAXB已经成为核心API的一部分,使得开发人员可以方便地处理XML数据,无需深入理解XML的复杂性。本学习资料主要涵盖了JAXB 2.0版本,这是JAXB的一个重要里程碑,引入了诸多改进和新特性。 ...

    JAXB的HelloWorld源码

    总结来说,JAXB是Java中处理XML的强大工具,通过学习JAXB的HelloWorld源码,新手可以快速上手,理解XML和Java对象之间的绑定,以及如何进行序列化和反序列化操作。随着对JAXB的深入理解和实践,开发人员能够更高效地...

    [精品]JAVA6新特性介绍使用JAXB来实现对象与XML之间的映射.doc

    【JAVA6新特性:JAXB简介】 Java Architecture for XML Binding(JAXB)是Java平台上的一个标准技术,它提供了一种方便的对象与XML之间的映射机制。在Java 6中,JAXB已经成为Java Standard Edition(Java SE)的一...

    JAXB2.0编组和解组实现

    JAXB2.0是JAXB规范的第二个主要版本,引入了许多新特性,如注解支持、XML Schema绑定等。相比于JAXB1.0,2.0版本提供了更加简洁和直观的API,使得开发人员无需编写大量的XML绑定文件(如bindings.xjb)就能完成XML和...

    JAXB XMLSPY

    **JAXB(Java Architecture for XML ...总结来说,JAXB是一种强大的Java XML处理技术,而XMLSPY作为一个全面的XML工具,是开发和调试XML相关项目的好帮手,尤其在配合JAXB使用时,可以大大提高开发效率和代码质量。

    JAXB_Java Architecture For XML Binding

    Java Architecture for XML Binding ...总结来说,JAXB是一个强大的工具,使得Java开发者能够方便地处理XML数据,简化了数据交换和序列化的复杂性。了解和熟练使用JAXB,可以显著提高XML相关项目的效率和可维护性。

    ae-jaxb.zip

    这个名为"ae-jaxb.zip"的压缩包显然包含了针对Android平台的JAXB实现及相关资源,方便开发者在Android项目中集成和使用。 JAXB是Java标准版(Java SE)的一部分,但在Android平台上并不是默认支持的,因为Android ...

    Java6JDK1.6新特性总结大全附代码.docx

    二、JAXB2(JSR 222)对象-XML 映射 1. JAXB 提供了对象与XML之间的自动转换,极大地简化了XML处理: - 在JDK 1.6中,JAXB 2.0被引入Java SE,它使用注解(Annotation)标记需要绑定的类和属性。 - 通过注解如`@...

    piccolo2d包

    总结来说,Piccolo2D是一个强大的Java 2D图形库,其核心库和扩展库共同提供了丰富的功能,如自定义绘图、视图滚动、事件处理等,适用于各种需要复杂2D图形界面的Java应用程序。在使用ScrollView.jar时,必须确保依赖...

    JPA-XJC:一个JAXB 2.1 XJC插件-开源

    **总结** JPA-XJC插件为JAXB和JPA的结合提供了一个实用的工具,使得XML模式文件可以直接生成符合JPA规范的Java类。通过利用这个插件,开发者可以更加高效地管理ORM过程,提高开发效率,同时保持代码的标准化和可...

    axis2的API,axis2 API,axis2帮助文档

    用户可以通过官方文档学习如何配置Axis2、创建服务、调用服务以及使用各种特性。此外,社区论坛和邮件列表也是获取问题解答和支持的重要资源。 ### Axis2与其他技术的集成 - **WS-Security**: 支持WS-Security标准...

    axis2客户端以及服务端所有jar包

    1. **Axis2简介** Axis2是第二代的Apache SOAP引擎,它在Axis1的基础上进行了很多改进,提供了更好的性能和灵活性。Axis2支持SOAP 1.1和1.2,同时对RESTful服务也有良好的支持。它采用了模块化设计,允许用户根据...

    xml-process.rar

    JAXB的自动化特性使得处理复杂的XML结构变得简单,但同时也可能导致代码过于依赖于XML结构。 **SAX** SAX(Simple API for XML)是一种事件驱动的解析方式,它不创建整个XML文档的内存表示,而是按需处理XML事件。...

    axis2_jar包(1)

    总结起来,"axis2_jar包(1)"是开发和运行基于Axis2的Web服务的关键组成部分。了解这些jar文件的功能和用途,有助于开发者更有效地利用Axis2框架进行服务开发和部署。在实际项目中,可以根据需求选择合适的模块和配置...

    axis2jar包下载

    Axis2是Apache软件基金会开发的一个开放源码的Web服务平台,专门用于构建高效、可扩展且灵活的Web服务。...理解并熟练使用Axis2,可以帮助开发者高效地构建和部署Web服务,同时利用其丰富的特性来满足各种业务需求。

    WebService之Axis2经典教程

    **1.1 Axis2简介** Axis2是由Apache组织维护的一个开源项目,它是一个基于Java的Web服务引擎,旨在提供高效、灵活且易于使用的Web服务解决方案。相比于其前身Axis1.x,Axis2进行了全面的重设计,提供了更多的特性和...

Global site tag (gtag.js) - Google Analytics