JAXB文档就像一本教科书,在我需要使用JAXB之前,我根本不需要花时间去学习它。
我有一个XSD,如果我想使用JAXB来编组和解组,工作流程是什么?
我不需要任何细节,只需要一个高层次的视图。
我已经知道的是: 1. JAXB可以用来获取对象并从它们创建XML文档,反之亦然。2.它使用了一些神秘的工具,名为" XJC“,我在他们的网站上找不到它的下载。3. XJC基于XSD为您创建类。
首先,如何找到XJC?我实际上知道它安装在我的系统上,但不确定它是从哪里得到的。
其次,无论这个工具是什么,它是如何进入我的机器的,我如何让它在最新版本的JAXB上运行?第三,如果我的XSD发生了变化,我真的必须重新创建整个Java对象,因此可能会使我的所有测试失效吗?或者,我是否可以定义对象到XSD的映射,这样我就可以控制映射,而不是一些默认的代码生成?
我主要习惯于获取XML并使用诸如xStream之类的东西来手动解组,但这不再是我的目的。
发布于 2010-08-05 05:17:29
假设你有JDK6;
xjc位于JDK的bin/文件夹中,类似于C:\Program Files (x86)\Java\jdk1.6.0_20\bin\xjc.exe
JDK附带了jaxb,虽然可能有来自http://jaxb.java.net/或其他可用实现的更新版本,但在这一点上您可能不需要担心。
JAXB可以做很多事情,我不能完全确定您想要实现什么。如果你有一个xsd,你可以通过运行下面的命令从它生成java类。
xjc -p com.mypackage myschema.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"));更多信息
发布于 2010-08-05 05:16:55
您可能已经安装了XJC。检查JDK 6安装的bin目录。一旦找到,如果您只运行XJC,它将为您提供命令行选项。
JAXB是一种规范,因此有多种实现:
JDK (RI),其版本与
如果您修改了您的模式,您将能够调整您的对象模型,特别是使用MOXy扩展。
要开始使用,请参阅:http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted
https://stackoverflow.com/questions/3409647
复制相似问题