JAXB文档就像一本教科书,在我需要使用它之前,我根本没有时间学习JAXB。
我有一个XSD,如果我想使用JAXB来编组和解组什么是工作流程?
我不需要任何细节只是一个高级视图。
我所知道的: 1. JAXB可用于获取对象并从中创建XML文档,反之亦然 它使用了一些名为“XJC”的神秘工具,我无法在他们的网站上找到ANYWHERE的下载 3. XJC基于XSD为您创建课程
首先,我如何找到XJC?我实际上知道它安装在我的系统上,不知道我从哪里得到它 其次,无论这个工具是什么以及如何进入我的机器,如何使用最新版本的JAXB运行它? 第三,所以如果我的XSD更改,我真的必须重新创建整个Java对象,因此可能使我的所有测试无效吗?或者我可以将对象定义为XSD映射,以便我控制映射,而不是默认代码生成?
我主要习惯使用XML并使用类似xStream之类的东西来手动解组,但这不再适用于我的目的。
答案 0 :(得分: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
并在项目中包含生成的类(更常见的是,您将在构建过程中运行该类)。
或者我可以将对象定义为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"));
反序列化xml文件
JAXBContext context = JAXBContext.newInstance(SearchParam.class);
Unmarshaller unMarshaller = context.createUnmarshaller();
SearchParam param = (SearchParam) unMarshaller.unmarshal(
new FileInputStream("/tmp/SearchParam.xml"));
反序列化并进行架构验证
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"));
更多信息
答案 1 :(得分:1)
您可能已经安装了XJC。检查JDK 6安装的bin目录。一旦找到,如果您只是运行XJC,它将为您提供命令行选项。
JAXB是一个规范,因此有多个实现:
如果您修改架构,您将能够调整对象模型,尤其是使用MOXy扩展。
要开始,请参阅: http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted