JAXB工作流程 - 如何使用JAXB

wal*_*mon 8 jaxb xml-serialization marshalling

JAXB文档就像一本教科书,在我需要使用它之前,我根本没有时间学习JAXB.

我有一个XSD,如果我想使用JAXB来编组和解组什么是工作流程?

我不需要任何细节只是一个高级别的视图.

我所知道的:1.JAXB可用于获取对象并从中创建XML文档,反之亦然2.它使用了一些名为"XJC"的神秘工具,我无法在其网站上找到ANYWHERE的下载3. XJC基于XSD为您创建类

首先,我如何找到XJC?我实际上知道它安装在我的系统上,不知道我从哪里得到它.
其次,无论这个工具是什么以及如何进入我的机器,如何使用最新版本的JAXB运行它?第三,所以如果我的XSD更改,我真的必须重新创建整个Java对象,因此可能使我的所有测试无效吗?或者我可以将对象定义为XSD映射,以便我控制映射,而不是默认代码生成?

我主要习惯于使用XML并使用类似xStream的东西来手动解组,但这不再是我的目的选项.

nos*_*nos 15

假设你有JDK6;

xjc位于JDK的bin /文件夹中,类似于C:\ Program Files(x86)\ Java\jdk1.6.0_20\bin\xjc.exe

JDK附带了jaxb,虽然可能有更新版本来自http://jaxb.java.net/或其他可用的实现,但此时您可能不需要关心它.

JAXB可以做很多事情,我并不确切地知道你想要完成什么.如果你有一个xsd,你可以通过运行eg来生成它的java类

xjc -p com.mypackage myschema.xsd
Run Code Online (Sandbox Code Playgroud)

并在项目中包含生成的类(更常见的是,您将在构建过程中运行它).

或者我可以将对象定义为XSD映射,以便我控制映射,而不是默认代码生成?

生成的类只是带有一些注释的pojos,您可以自己创建这些类,并通过注释完全控制映射.

如上所述,jaxb可以做很多事情,这里只是一些基本的例子,SearchParam/SearchType是一个由xjc从一个小的自定义.xsd生成的类.

将对象序列化为XML文件

JAXBContext context = JAXBContext.newInstance(SearchParam.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
List<String> hours = new LinkedList<String>();
hours.add("2009.12.11");
hours.add("2009.12.13");

SearchParam param = new SearchParam();
param.setFilter("greater");
param.setHours(hours);
param.setSearchType(SearchType.Fuzzy);
marshaller.marshal(param, new FileWriter("/tmp/SearchParam.xml"));    
Run Code Online (Sandbox Code Playgroud)

反序列化xml文件

 JAXBContext context = JAXBContext.newInstance(SearchParam.class);
 Unmarshaller unMarshaller = context.createUnmarshaller();
 SearchParam param = (SearchParam) unMarshaller.unmarshal(
                    new FileInputStream("/tmp/SearchParam.xml"));
Run Code Online (Sandbox Code Playgroud)

反序列化并进行模式验证

JAXBContext context = JAXBContext.newInstance(SearchParam.class);
Unmarshaller unMarshaller = context.createUnmarshaller();
Schema schema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
                 .newSchema(new  File("/tmp/schema1.xsd"));
unMarshaller.setSchema(schema);
SearchParam param = unMarshaller.unmarshal(
                      new FileInputStream("/tmp/SearchParam.xml"));
Run Code Online (Sandbox Code Playgroud)

更多信息