gpt4 book ai didi

java - 无法从文档中读取架构文件

转载 作者:行者123 更新时间:2023-11-30 08:48:07 26 4
gpt4 key购买 nike

我想用模式解码传入的 XML 对象。我用 schemagen 创建了一个模式来自 java 对象的命令并添加了一些 minOccur 和 maxOccur 属性。

我将模式放在 src/main/resources 中。这是错误: Failed to read schema document 'file:/C:/Users/cen/Desktop/wildfly-8.1.0.Final-sy/standalone/deployments/vloga-ear.ear/vloga-service.jar/VlogaData.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.

代码:

SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
ClassLoader classLoader = getClass().getClassLoader();
File schemaFile = new File(classLoader.getResource("VlogaData.xsd").getFile());
if (schemaFile.canRead()) LOG.info("can read");
Schema schema = sf.newSchema(schemaFile);
Unmarshaller unmarshaller = context.createUnmarshaller();
unmarshaller.setSchema(schema);

架构 xsd(尝试使用和不使用 xml 标记,使用 xsd 命名空间,结果相同):

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="VlogaData" type="VlogaData"/>

<xs:complexType name="VlogaData">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="idVloge" type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" name="idPriloge" type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" name="imeVloge" type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" name="verzija" type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" name="vrstaPriloge" type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" name="datumOblikovanja" type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" name="datumZadnjeSpremembe" type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" name="lastnik" type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" name="kljucneBesede" type="xs:string"/>
<xs:element minOccurs="1" maxOccurs="1" name="priloga" type="xs:base64Binary"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

我如何确定是这三个原因中的哪一个?文件路径似乎没问题(我解压了 jar 并且模式在那里)。 “可以读取”不是从记录器输出的,因此无法读取文件。但是为什么呢?第三个推理也应该没问题,因为我尝试了三种不同的模式,但没有任何效果。

最佳答案

我认为该文件无法读取,因为它在一个 jar 中,然后 file:/C:/Users/cen/Desktop/wildfly-8.1.0.Final-sy/standalone/deployments/vloga-ear .ear/vloga-service.jar/VlogaData.xsd 并不是真正的文件。

因为 SchemaFactory.newSchema 可以接收一个 URL 我建议你做更简单的事情:

    SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
ClassLoader classLoader = getClass().getClassLoader();
Schema schema = sf.newSchema(classLoader.getResource("VlogaData.xsd"));

它在我的环境中进行了一些小测试。

关于java - 无法从文档中读取架构文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32119751/

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