Xml serialization JAXB工作流程-如何开始使用JAXB
JAXB文档就像一本教科书,在使用它之前,我不必花时间学习JAXB的所有内容 我有一个XSD,如果我想使用JAXB封送和取消封送,那么工作流是什么 我不需要任何细节,只是一个高层次的观点 我已经知道: 1.JAXB可用于获取对象并从中创建XML文档,反之亦然 2.它使用了一个名为“XJC”的神秘工具,我在他们的网站上找不到下载的工具 3.XJC基于XSD为您创建类 首先,我如何找到XJC?我实际上知道它安装在我的系统上,但不确定它是从哪里获得的。Xml serialization JAXB工作流程-如何开始使用JAXB,xml-serialization,jaxb,marshalling,Xml Serialization,Jaxb,Marshalling,JAXB文档就像一本教科书,在使用它之前,我不必花时间学习JAXB的所有内容 我有一个XSD,如果我想使用JAXB封送和取消封送,那么工作流是什么 我不需要任何细节,只是一个高层次的观点 我已经知道: 1.JAXB可用于获取对象并从中创建XML文档,反之亦然 2.它使用了一个名为“XJC”的神秘工具,我在他们的网站上找不到下载的工具 3.XJC基于XSD为您创建类 首先,我如何找到XJC?我实际上知道它安装在我的系统上,但不确定它是从哪里获得的。 第二,不管这个工具是什么,它是如何进入我的机器的
第二,不管这个工具是什么,它是如何进入我的机器的,我如何让它使用最新版本的JAXB运行的? 第三,如果我的XSD发生了变化,那么我真的必须重新创建整个Java对象,从而使我的所有测试失效吗?或者我可以定义对象到XSD的映射,这样我就可以控制映射,而不是一些默认的代码生成
我主要习惯于使用XML和xStream之类的工具来手动解组,但这不再是我的选择。很可能您已经安装了XJC。检查JDK 6安装的bin目录。一旦找到,如果您只运行XJC,它将为您提供命令行选项 JAXB是一个规范,因此有多种实现:
- Metro(RI)的发行版与JDK更新密切相关,因此,如果您有最新的JDK,您应该会很好
- MOXy JAXB,EclipseLink的一部分
假设您有JDK6 xjc位于JDK的bin/文件夹中,类似于C:\ProgramFiles(x86)\Java\jdk1.6.0\u 20\bin\xjc.exe JDK随jaxb一起提供,虽然可能有来自或其他实现的较新版本,但此时您可能不需要担心这一点 JAXB可以做很多事情,但我不能完全确定您想要完成什么。如果您有一个xsd,您可以通过运行例如
xjc -p com.mypackage myschema.xsd
并将生成的类包含在项目中(更典型的情况是,您会将其作为构建过程的一部分运行)
或者我可以定义对象到XSD的映射吗
这样我就可以控制地图了,
不是一些默认的代码生成
生成的类只是带有一些注释的POJO,您可以自己创建这些类,并通过注释完全控制映射
如前所述,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"));
反序列化并进行架构验证
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"));
更多信息
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"));