gpt4 book ai didi

jakarta-ee - 加载打包在 WAR 中的 XSD 的正确方法?

转载 作者:行者123 更新时间:2023-12-03 09:46:01 26 4
gpt4 key购买 nike

我正在尝试验证在 Web 应用程序中解码的 XML 文件。 xml 文件本身在 web app 部署目录之外,对应的 XSD 被打包在 WAR 中,在类路径中,在 WEB-INF/classes/com/moi 中

我一直无法弄清楚如何创建 Schema 对象,以便它选择相对于类路径的 XSD 文件,而不是硬编码相对于工作目录的路径。我想相对于类路径选择它,以便在部署应用程序时(以及从单元测试运行时)可以找到它。下面的示例代码有效,它相对于工作目录查找它。

JAXBContext context;
context = JAXBContext.newInstance(Foo.class);
Unmarshaller unMarshaller = context.createUnmarshaller();

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("src/com/moi/foo.xsd"));

unMarshaller.setSchema(schema);
Object xmlObject = Foo.class.cast(unMarshaller.unmarshal(new File("C:\\foo.xml")));
return (Foo) xmlObject;

环境使用 JAXB2/JDK 1.6.0_22/JavaEE6。想法?

最佳答案

您可以执行以下操作:

ClassLoader classLoader = Foo.class.getClassLoader();
InputStream xsdStream = classLoader.getResourceAsStream("com/moi/foo.xsd");
StreamSource xsdSource = new StreamSource(xsdStream);
Schema schema = sf.newSchema(xsdSource);

关于jakarta-ee - 加载打包在 WAR 中的 XSD 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5307303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com