jaxb-如何将xsd文件映射到URL以查找它们
我有一个xsd,它有典型的导入语句来导入其他xsd文件,但不幸的是,引用是硬编码的路径。JAXB中是否有方法使用xbj文件覆盖这些导入的位置 所有这些XSD都是通过另一个jar(在jar内部)交付的,因此我希望将其中一个从类路径中移除,当它导入时,其他人尝试对其进行配置,以便将其他人从类路径中移除 谢谢,jaxb-如何将xsd文件映射到URL以查找它们,jaxb,xjc,Jaxb,Xjc,我有一个xsd,它有典型的导入语句来导入其他xsd文件,但不幸的是,引用是硬编码的路径。JAXB中是否有方法使用xbj文件覆盖这些导入的位置 所有这些XSD都是通过另一个jar(在jar内部)交付的,因此我希望将其中一个从类路径中移除,当它导入时,其他人尝试对其进行配置,以便将其他人从类路径中移除 谢谢, Dean您可以尝试以编程方式与XJC交互(见下文),并插入自己的EntityResolver来解析XML模式: import com.sun.codemodel.*; import com.s
Dean您可以尝试以编程方式与XJC交互(见下文),并插入自己的EntityResolver来解析XML模式:
import com.sun.codemodel.*;
import com.sun.tools.xjc.*;
import com.sun.tools.xjc.api.*;
SchemaCompiler sc = XJC.createSchemaCompiler();
sc.setEntityResolver(new YourEntityResolver());
sc.setErrorListener(new YourErrorListener());
sc.parseSchema(SYSTEM_ID, element);
S2JJAXBModel model = sc.bind();
下面是我给出的一个相关答案的链接,一些人认为这个答案很有用:
PUBLIC "http://example.org/A" "others/schema_a.xsd"
根据架构位置使用其他架构:
REWRITE_SYSTEM "https://example.org/a.xsd" "others/schema_a.xsd"
允许您使用架构文件的本地副本
请参阅和指南。
不幸的是,XJC中的目录支持并不总是像预期的那样工作,而且调试起来有点困难
从Maven工件解析模式
如果您使用的是Maven,那么可以使用Maven-jaxb2-plugin,它可以解析Maven工件中的模式:
REWRITE_SYSTEM "https://example.org/a.xsd" "maven:org.example:a!/a.xsd"
结合目录,您可以让JAXB在a-XXX.jar
中使用a.xsd
而不是https://example.org/a.xsd
请参见以下示例项目: