jaxb - 如何将xsd文件映射到URL以查找它们

Dea*_*ler 4 jaxb xjc

我有一个xsd,它具有导入其他xsd文件的典型import语句,但不幸的是,引用是硬编码路径.在JAXB中是否有办法使用xbj文件覆盖这些导入的位置?

所有这些xsds都是通过另一个jar(在jar内部)传递的,所以我想从类路径中获取一个,当它导入其他jar时尝试配置它以便其他人离开类路径.

谢谢,迪恩

lex*_*ore 9

您可以使用许多技术来解决此问题:

产品目录

您可以使用目录文件覆盖架构位置.这里有几个例子:

根据命名空间使用另一个模式:

PUBLIC "http://example.org/A" "others/schema_a.xsd"
Run Code Online (Sandbox Code Playgroud)

根据架构位置使用另一个架构:

REWRITE_SYSTEM "https://example.org/a.xsd" "others/schema_a.xsd"
Run Code Online (Sandbox Code Playgroud)

允许您使用模式文件的本地副本.

这个这个导游.不幸的是,XJC中的目录支持并不总是按预期工作,并且调试起来有点困难.

解决Maven工件中的模式

如果你正在使用Maven,你可以使用maven-jaxb2-plugin来解决Maven工件中的模式:

REWRITE_SYSTEM "https://example.org/a.xsd" "maven:org.example:a!/a.xsd"
Run Code Online (Sandbox Code Playgroud)

与目录结合使用,可以a.xsd在内部使用JAXB a-XXX.jar代替https://example.org/a.xsd.

请参阅以下示例项目: