2013-05-27 3 views
1

Я искал и искал, но я понятия не имею, что случилось. Я знаю, что стандартные Android библиотека не имеет поддержки схему или проверки XML, и вы не можете использовать Apache Xerces из коробки, поэтому я использую эту библиотеку: https://code.google.com/p/xerces-for-android/Проверка схемы XML в Android - получение «java.lang.ExceptionInInitializerError»

Людей, кажется, имеет успех с этим библиотеки, но я этого не делаю. Это мой код:

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); линии.

Я искал и искал решение этой проблемы, но я просто не знаю. Повсюду я выгляжу так, будто я делаю все правильно, но это просто не работает. Любая помощь будет принята с благодарностью.

+0

Ваш файл xml недопустим – Marco

+0

Файл схемы или тестовый файл xml? – DemonWav

+0

обе, проверьте мой ответ. Но вы должны сразу же пометить, что xml недействителен: Marco

ответ

0

Я пробовал оба ваши данные XML/схемы XML, и они оба недействительны:

http://www.utilities-online.info/xsdvalidation/ и даже стек Java говорят, что.

+0

Я понятия не имел, что этот сайт существует, я буду изучать его. – DemonWav

+0

Хорошо, я отредактировал исходное сообщение, чтобы показать мои изменения, xml-файлы теперь действительны, в соответствии с сайтом, с которым вы связались. Однако я получаю то же сообщение об ошибке. – DemonWav

+0

Тогда я понятия не имею, только одно последнее, что я хотел бы проверить: re ссылкой на все банки, добавив их в путь сборки? – Marco