导入jaxb所需要的jar文件。注意如果你是jdk1.6的话,不要用jwsdp2.0,2.0支持jdk1.5.
首先定义xsd文件。
players.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="club" type="Club" />
<xs:complexType name="Club">
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="createdDate" type="xs:date" />
<xs:element name="coach" type="xs:string" />
<xs:element name="players" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
<xs:element name="position" type="xs:string" />
<xs:element name="country" type="xs:string" />
<xs:element name="num" type="xs:string" />
<xs:element name="description" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
定义xjb文件 playersbinding.xjb
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="players.xsd" node="/xs:schema"><!-- schemaLocation属性是xsd文件的相对路径 -->
<jxb:globalBindings
fixedAttributeAsConstantProperty="true"
collectionType="java.util.ArrayList"
typesafeEnumBase="xs:NCName"
choiceContentProperty="false"
typesafeEnumMemberName="generateError"
enableFailFastCheck="false"
generateIsSetMethod="false"
underscoreBinding="asCharInWord"/>
<jxb:schemaBindings>
<jxb:package name="com.zhuyang.mapping.object"/>
<!-- 这里是生成的JAVA类文件存放包名 -->
<jxb:nameXmlTransform>
<jxb:elementName suffix="Element"/>
</jxb:nameXmlTransform>
</jxb:schemaBindings>
<!-- 这里是定义xsd中一个复合类型与Java类的映射(如果要修改才定义,不修改则不需要) -->
<jxb:bindings node="//xs:complexType[@name='Club']">
<jxb:class name="Club"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
最后ant脚本用来生成java对象
playersbuild.xml
<project basedir="." default="run">
<!--这里是jwsdp的安装目录 -->
<property name="jwsdp.home" value="C:\axis2\Sun\jwsdp-2.0" />
<!--这里是log4j的安装目录 -->
<property name="log4j.home" value="C:\axis2\o-x-mapping\o-x-mapping\implement\lib" />
<path id="xjc.classpath">
<pathelement path="src" />
<pathelement path="bin" />
<pathelement path="lib" />
<pathelement path="schemas" />
<!--for use with bundled ant-->
<fileset dir="${jwsdp.home}" includes="jaxb/lib/*.jar" />
<fileset dir="${jwsdp.home}" includes="sjsxp/lib/*.jar" />
<fileset dir="${jwsdp.home}" includes="jwsdp-shared/lib/activation.jar" />
<fileset dir="${jwsdp.home}" includes="jwsdp-shared/lib/resolver.jar" />
<fileset dir="${log4j.home}" includes="log4j-1.2.5.jar" />
</path>
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
<classpath refid="xjc.classpath" />
</taskdef>
<!--compile Java source files-->
<target name="compile" description="Compile all Java source files">
<echo message="Compiling the schema..." />
<!-- mkdir dir="src" /-->
<xjc schema="players.xsd" binding="playersbinding.xjb" destdir="src" />
<echo message="Compiling the java source files..." />
<mkdir dir="bin" />
<javac destdir="bin" debug="on">
<src path="src" />
<classpath refid="xjc.classpath" />
</javac>
</target>
<target name="run" depends="compile" description="Run the sample app">
<echo message="Running the sample application..." />
<java classname="com.zhuyang.mapping.object.Test" fork="true">
<classpath refid="xjc.classpath" />
</java>
</target>
</project>
Test.java
package com.zhuyang.mapping.object;
import java.util.GregorianCalendar;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class Test {
/**
* @param args
* @throws JAXBException
*/
public static void object2xml() throws JAXBException {
JAXBContext jaxbContent = JAXBContext
.newInstance("com.zhuyang.mapping.object");
Club.Players players1 = new Club.Players();
players1.setCountry("巴西");
players1.setName("罗纳尔多");
players1.setNum("9");
players1.setPosition("中锋");
players1.setDescription("外星人");
Club.Players players2 = new Club.Players();
players2.setCountry("中国");
players2.setName("李毅");
players2.setNum("14");
players2.setDescription("带球像亨利");
players2.setPosition("中锋");
Club.Players players3 = new Club.Players();
players3.setCountry("英格兰");
players3.setName("欧文");
players3.setNum("10");
players3.setDescription("金童");
players3.setPosition("中锋");
Club.Players players4 = new Club.Players();
players4.setCountry("威尔士");
players4.setName("贝尔");
players4.setNum("3");
players4.setPosition("右后卫");
players4.setDescription("速度变态");
Club c = new Club();
List<Club.Players> players=c.getPlayers();
players.add(players1);
players.add(players2);
players.add(players3);
players.add(players4);
c.setCoach("Mario");
c.setCreatedDate(getDate());
c.players=players;
c.setName("Real Madrid");
JAXBElement<Club> element = (new ObjectFactory()).createClub(c);
Marshaller marshaller = jaxbContent.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.setProperty("jaxb.encoding", "utf-8");
marshaller.marshal(element, System.out);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
object2xml();
System.out.println(System.getProperty("user.dir"));
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static XMLGregorianCalendar getDate() {
try {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(
new GregorianCalendar(2011,2,20) {
});
} catch (DatatypeConfigurationException e) {
throw new Error(e);
}
}
}
分享到:
相关推荐
[精品]JAVA6新特性介绍使用JAXB来实现对象与XML之间的映射
castor是一种将java对象和XML自动绑定的开源软件。它可以在java对象、XML文本、SQL数据表以及LDAP目录之间绑定。Castor几乎是JAXB的替代品。Castor是ExoLab Group下面的一个开放源代码的项目,它主要实现的是O/R映射...
Java Bean 与 XML 映射关系。如何只要关注业务实体,却不必关心XML的数据结构。相关的技术为J2EE JAXB。
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式
O/X 映射器这个概念并不新鲜,O 代表 Object,X 代表 XML。它的目的是在 Java 对象(几乎总是一个 plain old Java object,或简写为 POJO)和 XML 文档之间来回转换。 例如,您可能有一个带有几个属性的简单 bean,...
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式,...
我们把对象与关系数据库之间的映射称为ORM, 其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping). 原来JAXB是JavaEE的一部分,在JDK6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK6中自带的这个...
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式,...
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式,...
一个使用JAXB的简单例子…… Java对象生成xml, xml映射到Java对象。
本工具是能够将bean映射为xml的一种小东西,很多公司的项目经理遇到问题都解决不了。这是一种新技术,请大家赶快下载。
JDK6的新特性之二:使用JAXB2来实现对象与XML之间的映射 JDK6的新特性之三:理解StAX StAX(JSR 173)是JDK6.0中除了DOM和SAX之外的又一种处理XML文档的API JDK6的新特性之四:使用Compiler API 现在我们可以用JDK6 ...
开发人员使用Java对象,这些对象映射到Genologics的API文档所描述的XML文档上。 它使用JAXB对象到XML的绑定机制来转换发送到Genologics的REST API和从Genologics的REST API接收的XML消息。 通信使用Apache的...
JAXB2实现对象与XML之间的映射 StAX Compiler API 轻量级 Http Server API 插入式注解处理API(Pluggable Annotation Processing API) 用Console开发控制台程序 对脚本语言的支持(如:ruby,groovy,javascript) ...
2.用来处理Marshal/Unmarshal的XML Binding机制,JAX-WS2.0用JAXB2来处理Java Object与XML之间的映射,Marshalling就是把Java Object映射到XML,Unmarshalling则是把XML映射到Java Object.之所以要做Java Object与XML的...
JDK6的新特性之二_使用JAXB2来实现对象与XML之间的映射 JDK6的新特性之三_理解StAX JDK6的新特性之四_使用Compiler API JDK6的新特性之五_轻量级HttpServer JDK6的新特性之七_用Console开发控制台程序 JDK6的...
Java 的 MOXy(一种 JAXB 实现)和 XStream 已通过向对象添加 XPath 注释将单个属性/字段绑定到 XML 值来解决这个问题,但是从来没有为 .NET 开发过这种通用和健壮的解决方案。 在 .NET 中,首选解决方案通常是 XML...
javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...
该插件在从 XML 模式为用户界面生成值对象时特别有用。 用户界面标记(例如 Struts HTML 标记)使用对 bean 属性的反射来呈现自身,因此在映射到用户界面本身的 Java Bean 中设置一组合理的固定值通常很有用。 ...
真正简单的Java XML绑定(RE-JAXB)是一种将XML映射到普通的旧Java对象再映射回XML的方法,而无需使用Bean,无需外部绑定定义,无需手动映射值以及无需使用XSD文件。