gpt4 book ai didi

java - Android 中的 XML 架构验证 - 获取 "java.lang.ExceptionInInitializerError"

转载 作者:行者123 更新时间:2023-12-01 04:39:40 25 4
gpt4 key购买 nike

我已经搜索了,我已经搜索了,但我不知道出了什么问题。我知道标准 Android 库不支持 Schema 或 xml 验证,并且您不能开箱即用地使用 Apache Xerces,所以我使用这个库: https://code.google.com/p/xerces-for-android/

人们似乎在这个库上取得了成功,但我没有。这是我的代码:

private boolean validateDocument() {

boolean result;

try {

InputStream is = context.getResources().openRawResource(R.raw.xml_schema);
File file = context.getFileStreamPath(fileName);

Source schemaFile = new StreamSource(is);
Source xmlFile = new StreamSource(file);

SchemaFactory factory = new XMLSchemaFactory();
Schema schema = factory.newSchema(schemaFile);

Validator validator = schema.newValidator();

validator.validate(xmlFile);

result = true;
} catch (SAXException e) {
result = false;
e.printStackTrace();
} catch (IOException ie) {
result = false;
ie.printStackTrace();
}

return result;

}

我不确定我的 xml_schema 文件是否正确,但这似乎不是问题所在。无论如何,它是:

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="manifest" type="ManifestType" />

<xs:complexType name="ManifestType" >
<xs:sequence>
<xs:element name="base_url" type="BaseUrl" maxOccurs="1" />
<xs:element name="current_version" type="CurrentVersion" maxOccurs="1" />
<xs:element name="version" type="VersionType" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="BaseUrl" >
<xs:attribute name="url" type="xs:string" use="required" />
</xs:complexType>

<xs:complexType name="CurrentVersion" >
<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="zip_url" type="xs:string" use="required" />
<xs:attribute name="build_md5" type="xs:boolean" use="required" />
</xs:complexType >

<xs:complexType name="VersionType" >
<xs:sequence >
<xs:element name="file" type="FileType" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="add" type="AddType" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="remove" type="RemoveType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="build_md5" type="xs:string" />
<xs:attribute name="prefix" type="xs:string" />
</xs:complexType>

<xs:complexType name="FileType" >
<xs:attribute name="path" type="xs:string" use="required" />
<xs:attribute name="url" type="xs:string" />
<xs:attribute name="md5" type="xs:string" />
<xs:attribute name="patch" type="xs:string" />
<xs:attribute name="file" type="xs:string" use="required" />
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="permissions" use="required" >
<xs:simpleType>
<xs:restriction base="xs:integer" >
<xs:minInclusive value="0" />
<xs:maxInclusive value="777" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>

<xs:complexType name="AddType" >
<xs:attribute name="path" type="xs:string" use="required" />
<xs:attribute name="url" type="xs:string" />
<xs:attribute name="file" type="xs:string" use="required" />
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="permissions" use="required" >
<xs:simpleType>
<xs:restriction base="xs:integer" >
<xs:minInclusive value="0" />
<xs:maxInclusive value="777" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>

<xs:complexType name="RemoveType" >
<xs:attribute name="path" type="xs:string" use="required" />
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>

</xs:schema>

我没有需要验证的确切 XML 文件,但这是我用于测试的示例:

<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >

<base_url url="https://whatever.com" />
<current_version id="someversion"
zip_url="somedownloadurl.zip"
build_md5="true" />

<version id="versionA" build_md5="md5sum" prefix="rom_update_version=" >
<file path="path/of/example" url="https://someurl.com" md5="md5sum" patch="path/of/example/file.patch" file="path/of/example/file" name="file" permissions="645" />
<file path="path/of/example2" md5="md5sum" patch="path/of/example2/file2.patch" file="path/of/example2/file2" name="file2" permissions="665" />

<add path="path/of/example3" file="path/of/example3/file3" name="file3" permissions="333" />

<remove path="path/of/example4" name="file4" />
</version>

<version id="versionB" build_md5="md5sum" prefix="rom_update_version=" >
<file path="path/of/example" md5="md5sum" patch="path/of/example/file.patch" file="path/of/example/file" name="file" permissions="777" />
<file path="path/of/example2" url="https://someurl.com" md5="md5sum" patch="path/of/example2/file2.patch" file="path/of/example2/file2" name="file2" permissions="775" />

<add path="path/of/example3" file="path/of/example3/file3" name="file3" permissions="333" />

<remove path="path/of/example4" name="file4" />
</version>
</manifest>

这是完整的异常:

Caused by: java.lang.ExceptionInInitializerError
at mf.org.apache.xerces.impl.dv.SchemaDVFactory.getInstance(SchemaDVFactory.java:73)
at mf.org.apache.xerces.impl.dv.SchemaDVFactory.getInstance(SchemaDVFactory.java:55)
at mf.org.apache.xerces.impl.xs.XMLSchemaLoader.reset(XMLSchemaLoader.java:999)
at mf.org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:536)
at mf.org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(XMLSchemaLoader.java:515)
at mf.org.apache.xerces.jaxp.validation.XMLSchemaFactory.newSchema(XMLSchemaFactory.java:237)
at mf.javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:611)
at wav.demon.cognitionupdate.XMLRetriever.XMLParser.validateDocument(XMLParser.java:116)
at wav.demon.cognitionupdate.XMLRetriever.XMLParser.<init>(XMLParser.java:78)
at wav.demon.cognitionupdate.XMLRetriever.TestUpdate.doInBackground(TestUpdate.java:70)
at wav.demon.cognitionupdate.XMLRetriever.TestUpdate.doInBackground(TestUpdate.java:28)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
... 4 more

at wav.demon.cognitionupdate.XMLRetriever.XMLParser.validateDocument(XMLParser.java:116) 是我的第一个代码,它是 Schema schema =factory.newSchema( schemaFile); 行。

我一直在寻找这个问题的解决方案,但我只是一无所知。无论我在哪里看,看起来我都做得对,但这就是行不通。任何帮助将不胜感激。

最佳答案

我已经尝试了您的 xml data/xml 方案,但它们都无效:

http://www.utilities-online.info/xsdvalidation/甚至 Java 堆栈也是这么说的。

关于java - Android 中的 XML 架构验证 - 获取 "java.lang.ExceptionInInitializerError",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16764947/

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