假设你有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
并将生成的类包含在您的项目中(通常您会在构建过程中运行它)。
或者我可以定义对象到 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"));
反序列化 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"));
更多信息