org.xml.sax.SAXParseException при попытке проверки с использованием стандартного средства проверки и xsd? - PullRequest
0 голосов
/ 23 февраля 2019

Существует метод, вызвавший исключение org.xml.sax.SAXParseException.когда попытаться проверить мои данные.Итак, для проверки моих входных данных я использую стандартный пакет javax.xml.validation.

У меня есть схема xsd, которая предполагает наличие 2-х контейнеров - пользователи и пользователи с ошибками могут содержать список элементов в каждой подпрограмме-container, есть Value и objectId (не обязательно)

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2018 sp1 (x64 by Organization-->
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://mynamespace" targetNamespace="http://mynamespace" elementFormDefault="qualified">
    <complexType name="User_Type">
        <sequence>
            <element name="objectId" minOccurs="0" maxOccurs="1">
                <annotation>
                    <documentation>(КМД)идентификатор риск-метрики, будет проигнорирован при операции добавления</documentation>
                </annotation>
                <simpleType>
                    <restriction base="string">
                        <maxLength value="36"/>
                    </restriction>
                </simpleType>
            </element>
            <element name="Value" minOccurs="1" maxOccurs="1">
                <simpleType>
                    <restriction base="string">
                        <maxLength value="1024"/>
                    </restriction>
                </simpleType>
            </element>
        </sequence>
    </complexType>
    <complexType name="Message_Type">
        <sequence>
            <element name="Text" minOccurs="0">
                <simpleType>
                    <restriction base="string">
                        <maxLength value="2048"/>
                    </restriction>
                </simpleType>
            </element>
        </sequence>
    </complexType>
    <element name="Users">
        <complexType>
            <sequence>
                <element name="User" type="tns:User_Type" minOccurs="0" maxOccurs="unbounded"/>
                <element name="Error" type="tns:Message_Type" minOccurs="0" maxOccurs="1"/>
            </sequence>
        </complexType>
    </element>
</schema>

Этот входной код, который я хочу проверить - есть только один пользователь с полем.

String rm = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Users><User><Value>Value0</Value></User><Users>";

Этот код - этометод.Итак, rm - это проверка xml validationFile содержит ссылку на xsd И я просто читаю этот файл и пытаюсь проверить входной поток String

String rm = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Users><User><Value>Value0</Value></User><Users>";
String xmlFile = rm
String validationFile = "xsd/headVersions/users_1.8.xsd";

InputStream stream = new ByteArrayInputStream(xmlFile.getBytes(StandardCharsets.UTF_8));
StreamSource source = new StreamSource(stream);

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource(validationFile).getFile());

SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
schemaFactory.newSchema(file).newValidator().validate(source);
return true;

И яисключение синтаксического анализа, в котором подробно сказано, что

cvc-elt.1: не удается найти объявление элемента 'Users'.

1 Ответ

0 голосов
/ 23 февраля 2019

В вашем .xsd я вижу, что вы используете XMLSpy.Почему бы вам не использовать его для проверки вашего XML в соответствии со схемой?

Ваш XML недействителен, потому что у вас отсутствует конечный тег Users.После исправленной версии:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Users>
  <User>
    <Value>Value0</Value>
  </User>
</Users>

Я бы предложил исправить ваши проблемы с пространством имен в вашей схеме следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2018 sp1 (x64 by Organization-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="User_Type">
        <xs:sequence>
            <xs:element name="objectId" minOccurs="0" maxOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="36"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Value" minOccurs="1" maxOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="1024"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Message_Type">
        <xs:sequence>
            <xs:element name="Text" minOccurs="0">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="2048"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="Users">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="User" type="User_Type" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="Error" type="Message_Type" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Я удалил вашу документацию, потому что она дает странные ошибки.Я использовал онлайн-валидатор: https://www.liquid -technologies.com / online-xsd-validator

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...