加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用jaxb-xjc的xjc和schemagen

发布时间:2020-12-15 23:50:20 所属栏目:百科 来源:网络整理
导读:jaxb 网站 https://jaxb.java.net/ 直接下载最新版本的 jaxb 解压包后,可以在bin目录下找到xjc的bat文件。 根据需要进行修改和使用。 XFC的使用来自 http://blog.csdn.net/darxin/article/details/4 一. xjc使用帮助 1. 通过命令行编译 命令行程序xjc用于编

jaxb 网站

https://jaxb.java.net/

直接下载最新版本的
jaxb
解压包后,可以在bin目录下找到xjc的bat文件。
根据需要进行修改和使用。


XFC的使用来自
http://blog.csdn.net/darxin/article/details/4

一. xjc使用帮助

1. 通过命令行编译
命令行程序xjc用于编译DTD或Schema生成与XML数据结构对应的JavaBeans类。操作方法如下:

xjc [-xmlschema|-dtd] [–d 保存java文件的目录] [–p java文件所在的包] <编译文件>

-xmlschema 指定编译文件的格式为Schema格式,此参数是默认值,可以不用提供。
如果不提供此参数,编译文件必须是Schema文件。
-dtd 指定编译文件的格式为DTD格式,如果编译文件是DTD文件则必须提供此参数。
-d 指定了保存java文件的目录
-p 指定了生成的java文件所在的包

例如编译当前目录下的schema.xls文件,java文件保存在src目录,包名为generate,其命令如下:
xjc –d src –p generate schema.xsd
如果编译文件是schema.dtd,则命令如下:

xjc –dtd –d src –p generate schema.dtd

-----------------------------------
xsd中有指定namespace时,-p 选择无效,执行xjc会产生conflict,而中断。
-----------------------------------

二. 序列化(Marshalling)与反序列化(Unmarshalling)

要想在Java程序中使用JAXB,必须用到以下几个jar包:

jaxb-api.jar
jaxb-impl.jar
activation.jar
jsr173_1.0_api.jar

以上包均在/JAXB-HOME/lib目录中可以找到。

【jdk1.7 貌似已经包含了这些包】

JAXB的核心类是JAXBContext类,该类可以根据一个包名或一个类名加载Java Objects。

使用包名加载Java Objects的样例如:

JAXBContext jc = JAXBContext.newInstance("generate");

其指定的包中必须包含ObjectFactory类,该类由xjc生成,用于生成XML数据所对应的Java Objects。
如果使用类名加载Java Object,例如:

JAXBContext jc = JAXBContext.newInstance(ObjectFactory.class);

其指定的类必须是用于生成Java Objects的工厂类,如ObjectFactory类。

package generated;


import java.io.InputStream;
import java.io.OutputStream;


import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;


public class JAXBUtils {


  private JAXBUtils() {


    throw new UnsupportedOperationException();
  }


  public static Object unmarshal(String contextPath,InputStream xmlStream)
      throws JAXBException {


    JAXBContext jc = JAXBContext.newInstance(contextPath);
    Unmarshaller u = jc.createUnmarshaller();


    return u.unmarshal(xmlStream);
  }


  public static void marshal(String contextPath,Object obj,OutputStream stream) throws JAXBException {


    JAXBContext jc = JAXBContext.newInstance(contextPath);
    Marshaller m = jc.createMarshaller();
    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);
    m.setProperty(Marshaller.JAXB_ENCODING,"UTF-8");


    m.marshal(obj,stream);
  }
}

使用该工具类

public class JaxbTest {

    public static void main(String[] args) throws FileNotFoundException,JAXBException {

        // unmarshal
        InputStream is = new FileInputStream("C:/test.xml");
        Object obj = JAXBUtils.unmarshal("generate",is);
        System.out.println(v.getUserid());

        // marshal
        OutputStream f = new FileOutputStream("C:/Test1.xml");
        JAXBUtils.marshal("generate",obj,f);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读