我有一个xsd,它具有导入其他xsd文件的典型import语句,但不幸的是,引用是硬编码路径.在JAXB中是否有办法使用xbj文件覆盖这些导入的位置?
所有这些xsds都是通过另一个jar(在jar内部)传递的,所以我想从类路径中获取一个,当它导入其他jar时尝试配置它以便其他人离开类路径.
谢谢,迪恩
您可以使用许多技术来解决此问题:
产品目录
您可以使用目录文件覆盖架构位置.这里有几个例子:
根据命名空间使用另一个模式:
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.
请参阅以下示例项目: