jaxb 简介

news/2025/2/21 4:27:50/
JavaTM Architecture for XML Binding (JAXB) 提供了api 和工具用于自动映射XML文档和Java对象。
 
  JAXB框架允许开发者执行以下的操作:
 
  通过schema 生成相应的java 源文件
  访问以及更新相应的java 源文件
  配置java 源文件,生成相应的schema

  JAXB 给了java 开发者一种有效的和标准的方式用于映射xml和java 代码。java开发者使用JAXB能提供生产力,由于只需要写很少的代码,不需要成为xml方面的专家。JAXB 对于开发者来说更容易扩展他们的应用,使用XML或者web services技术。


  看一个简单的例子:
 
  从xsd文件生成相应的java 文件

  xsd 文件配置如下:
 
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
        schemaLocation="http://www.w3.org/2001/xml.xsd" />
 
  <xs:complexType name="foo">
    <xs:sequence>
      <xs:element name="age" type="xs:int" />
    </xs:sequence>
  </xs:complexType>
 
  <xs:element name="root" type="foo" />
 
  </xs:schema>

  定义ant build :
  主要的内容如下:
 <path id="classpath">
    <pathelement path="src" />
    <pathelement path="classes" />
    <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" />
  </path>
  定义xjc任务,用于从schema 中生成相应的java 文件
  <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
    <classpath refid="classpath" />
  </taskdef>

  执行xjc
  <xjc schema="po.xsd" destdir="gen-src">
      <produces dir="gen-src" includes="**/*.java" />
  </xjc>

  执行ant 任务后产生的java 文件如下:

  foo.java

  @XmlAccessorType(AccessType.FIELD)
  @XmlType(name = "foo", propOrder = {
    "age"
})
public class Foo {

    @XmlElement(type = Integer.class)
    protected int age;

    /**
     * Gets the value of the age property.
     *
     */
    public int getAge() {
        return age;
    }

    /**
     * Sets the value of the age property.
     *
     */
    public void setAge(int value) {
        this.age = value;
    }

}

ObjectFactory.java 主要的产生类,作为工厂类

@XmlRegistry
public class ObjectFactory {

    private final static QName _Root_QNAME = new QName("", "root");

    /**
     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: generated
     *
     */
    public ObjectFactory() {
    }

    /**
     * Create an instance of {@link Foo }
     *
     */
    public Foo createFoo() {
        return new Foo();
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link Foo }{@code >}}
     *
     */
    @XmlElementDecl(namespace = "", name = "root")
    public JAXBElement<Foo> createRoot(Foo value) {
        return new JAXBElement<Foo>(_Root_QNAME, Foo.class, null, value);
    }

}
比较简单的实现,不过主要的工作还是用来通过java类来生成相应的xml文件:
测试方法:
public static void main(String[] args) throws Exception {
      
        JAXBContext context = JAXBContext.newInstance(ObjectFactory.class);
        ObjectFactory of = new ObjectFactory();
        Foo foo = new Foo();
        foo.setAge(11);
        JAXBElement<Foo> e = of.createRoot(foo);

        //用于输出元素
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        FileOutputStream stream = new FileOutputStream(new File(args[0]));
        marshaller.marshal(e, stream);
    }

生成的xml如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <age>11</age>
</root>




 

http://www.ppmy.cn/news/496625.html

相关文章

jzoj1213. 棋盘上的士兵

jzoj1213. 棋盘上的士兵 题目DescriptionInputOutputSample InputSample OutputData Constraint 分析CODE 题目 Description 话说Jby发明了一个取石子游戏之后&#xff0c;一下就被聪明的你破解了…. 这次他又搞了一个新的游戏来折磨游戏者; Jby会给定的一个N*N的棋盘&#x…

JNI 对象处理和数据类型转换

对象处理 JNI 的基本问题就是解决 Java 和 C 代码互相调用的通信问题&#xff0c;在 C 代码编写过程中最大的问题莫过于适应其中的代码编写规则&#xff0c;C调用或是返回的内容必须遵守 JVM 和 C 代码的通信规则。 C 调用 Java 的一般步骤如下&#xff1a; 获得类&#xff1a;…

MySQL数据的插入、修改、删除(INSERT /Update/DELETE)

一、数据的插入&#xff08;Insert/Create&#xff09; CREATE TABLE students ( id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, sn INT NOT NULL UNIQUE COMMENT 学号, name VARCHAR(45) NOT NULL, email VARCHAR(200) NULL ); -- INSERT 操作的基本格式 --…

jbd2

[译文] Linux: The Journaling Block Device June 21, 2006 - 2:40am Submitted by Kedar Sovani on June 21, 2006 - 2:40am.http://kerneltrap.org/node/6741 原作者与版权信息&#xff1a; Amey Inamdar (www.geocities.com/amey_inamdar) is a kernel developer working at…

Qt 自定义流程图 diagram

Qt 自定义流程图 diagram 前言程序执行效果程序源码下载图形视图框架成员介绍重写QGraphicsItem程序源码介绍重点代码 前言 本文将对QGraphicsScene, QGraphicsView,QGraphicsItem这三个类进行简单介绍&#xff0c;并通过diagram流程图项目对自定义QGraphicsItem操作进行演示讲…

jewb21

调用doget 及dopost 拿到购物车 判断 private IgoodsBiz goodsBiznew GoodsBizImpl(); …

集合详解(小白必看)

一、集合概述 集合是JAVA中提供的一种容器&#xff0c;用来存储多个数据。 1、集合与数组的区别 数组特点&#xff1a;类型固定&#xff0c;长度固定 集合特点&#xff1a;类型不固定&#xff0c;长度也不固定&#xff0c;随意存放任何数据 二、集合框架 三、集合分类与特…

Markdown插入图片的方法

Markdown插入图片的方法 Markdown插入图片的语法&#xff1a; \!\[alt 属性文本](图片地址) \!\[alt 属性文本](图片地址 "可选标题") 说明&#xff1a; 以感叹号开头! 接着一个中括号[ ] 接着一个小括号( )&#xff0c;里面放上图片的网址&#xff0c;最后加上可选…