2013-03-13 2 views
1

У нас есть сайт с запущенной версией 2.0.17 of Symfony (да, мы знаем, что он устарел, происходит переход на 2.2.x). Он не работал хорошо, пока несколько дней назад, когда мы начали получать ошибку 500 с этим сообщением:Symfony2: «Invalid Schema» в режиме редактирования CRUD

Внимание: DOMDocument :: schemaValidate(): Invalid схемы в/вар/WWW/клиентов/CUSTOMERNAME /symfony/vendor/symfony/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php линия 197

ошибка происходит, когда мы пытаемся создать форму редактирования с FormBuilder. Все отлично работает в наших тестовых средах, что создает огромную боль для устранения неполадок.

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

Вот эта часть полной трассировки стека. DOMDocument->schemaValidate() - метод, вызывающий предупреждение.

at DOMDocument ->schemaValidate ('/var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd') 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php at line 197  
at XmlFileLoader ->parseFile ('/var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/Resources/config/validation.xml') 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php at line 32  
at XmlFileLoader ->loadClassMetadata (object(ClassMetadata)) 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Validator/Mapping/Loader/LoaderChain.php at line 57  
at LoaderChain ->loadClassMetadata (object(ClassMetadata)) 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Validator/Mapping/Loader/LoaderChain.php at line 57  
at LoaderChain ->loadClassMetadata (object(ClassMetadata)) 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php at line 68  
at ClassMetadataFactory ->getClassMetadata ('OurCompany\OurCMSBundle\SearchableInterface') 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Validator/Mapping/ClassMetadataFactory.php at line 65  
at ClassMetadataFactory ->getClassMetadata ('OurCompany\OurCMSBundle\Entity\News') 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php at line 314  
at ValidatorTypeGuesser ->guess ('OurCompany\OurCMSBundle\Entity\News', 'title', object(Closure)) 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/Extension/Validator/ValidatorTypeGuesser.php at line 39  
at ValidatorTypeGuesser ->guessType ('OurCompany\OurCMSBundle\Entity\News', 'title') 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/FormTypeGuesserChain.php at line 46  
at Symfony\Component\Form\{closure} (object(ValidatorTypeGuesser)) 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/FormTypeGuesserChain.php at line 85  
at FormTypeGuesserChain ->guess (object(Closure)) 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/FormTypeGuesserChain.php at line 47  
at FormTypeGuesserChain ->guessType ('OurCompany\OurCMSBundle\Entity\News', 'title') 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/FormFactory.php at line 315  
at FormFactory ->createBuilderForProperty ('OurCompany\OurCMSBundle\Entity\News', 'title', null, array()) 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/FormBuilder.php at line 575  
at FormBuilder ->create ('title', null, array()) 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/FormBuilder.php at line 691  
at FormBuilder ->buildChildren() 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/FormBuilder.php at line 654  
at FormBuilder ->getForm() 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Component/Form/FormFactory.php at line 138  
at FormFactory ->create (object(NewsType), object(News), array()) 
    in /var/www/customers/customername/symfony/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php at line 129 
at Controller ->createForm (object(NewsType), object(News)) 
    in /var/www/customers/customername/symfony/src/Customer/OurCMSBundle/Controller/NewsController.php at line 127  
at NewsController ->editAction ('2') 

Схема, которая используется является частью компонента Symfony средства проверки, расположенного в vendor/symfony/src/Symfony/Component/Validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd. Он проверяется при проверке с помощью w3.org validator. Вот схема:

<?xml version="1.0" ?> 

<xsd:schema xmlns="http://symfony.com/schema/dic/constraint-mapping" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://symfony.com/schema/dic/constraint-mapping" 
    elementFormDefault="qualified"> 

    <xsd:annotation> 
    <xsd:documentation><![CDATA[ 
     Symfony Validator Constraint Mapping Schema, version 1.0 
     Authors: Bernhard Schussek 

     A constraint mapping connects classes, properties and getters with 
     validation constraints. 
    ]]></xsd:documentation> 
    </xsd:annotation> 

    <xsd:element name="constraint-mapping" type="constraint-mapping" /> 

    <xsd:complexType name="constraint-mapping"> 
    <xsd:annotation> 
     <xsd:documentation><![CDATA[ 
     The root element of the constraint mapping definition. 
     ]]></xsd:documentation> 
    </xsd:annotation> 
    <xsd:sequence> 
     <xsd:element name="namespace" type="namespace" minOccurs="0" maxOccurs="unbounded" /> 
     <xsd:element name="class" type="class" maxOccurs="unbounded" /> 
    </xsd:sequence> 
    </xsd:complexType> 

    <xsd:complexType name="namespace"> 
    <xsd:annotation> 
     <xsd:documentation><![CDATA[ 
     Contains the abbreviation for a namespace. 
     ]]></xsd:documentation> 
    </xsd:annotation> 
    <xsd:simpleContent> 
     <xsd:extension base="xsd:string"> 
     <xsd:attribute name="prefix" type="xsd:string" use="required" /> 
     </xsd:extension> 
    </xsd:simpleContent> 
    </xsd:complexType> 

    <xsd:complexType name="class"> 
    <xsd:annotation> 
     <xsd:documentation><![CDATA[ 
     Contains constraints for a single class. 

     Nested elements may be class constraints, property and/or getter 
     definitions. 
     ]]></xsd:documentation> 
    </xsd:annotation> 
    <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
     <xsd:element name="group-sequence" type="group-sequence" minOccurs="0" maxOccurs="1" /> 
     <xsd:element name="constraint" type="constraint" minOccurs="0" maxOccurs="unbounded" /> 
     <xsd:element name="property" type="property" minOccurs="0" maxOccurs="unbounded" /> 
     <xsd:element name="getter" type="getter" minOccurs="0" maxOccurs="unbounded" /> 
    </xsd:choice> 
    <xsd:attribute name="name" type="xsd:string" use="required" /> 
    </xsd:complexType> 

    <xsd:complexType name="group-sequence"> 
    <xsd:annotation> 
     <xsd:documentation><![CDATA[ 
     Contains the group sequence of a class. Each group should be written 
     into a "value" tag. 
     ]]></xsd:documentation> 
    </xsd:annotation> 
    <xsd:sequence> 
     <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" /> 
    </xsd:sequence> 
    </xsd:complexType> 

    <xsd:complexType name="property"> 
    <xsd:annotation> 
     <xsd:documentation><![CDATA[ 
     Contains constraints for a single property. The name of the property 
     should be given in the "name" option. 
     ]]></xsd:documentation> 
    </xsd:annotation> 
    <xsd:sequence> 
     <xsd:element name="constraint" type="constraint" maxOccurs="unbounded" /> 
    </xsd:sequence> 
    <xsd:attribute name="name" type="xsd:string" use="required" /> 
    </xsd:complexType> 

    <xsd:complexType name="getter"> 
    <xsd:annotation> 
     <xsd:documentation><![CDATA[ 
     Contains constraints for a getter method. The name of the corresponding 
     property should be given in the "property" option. 
     ]]></xsd:documentation> 
    </xsd:annotation> 
    <xsd:sequence> 
     <xsd:element name="constraint" type="constraint" maxOccurs="unbounded" /> 
    </xsd:sequence> 
    <xsd:attribute name="property" type="xsd:string" use="required" /> 
    </xsd:complexType> 

    <xsd:complexType name="constraint" mixed="true"> 
    <xsd:annotation> 
     <xsd:documentation><![CDATA[ 
     Contains a constraint definition. The name of the constraint should be 
     given in the "name" option. 

     May contain a single value, multiple "constraint" elements, 
     multiple "value" elements or multiple "option" elements. 
     ]]></xsd:documentation> 
    </xsd:annotation> 
    <xsd:choice minOccurs="0"> 
     <xsd:element name="constraint" type="constraint" minOccurs="1" maxOccurs="unbounded" /> 
     <xsd:element name="option" type="option" minOccurs="1" maxOccurs="unbounded" /> 
     <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" /> 
    </xsd:choice> 
    <xsd:attribute name="name" type="xsd:string" use="required" /> 
    </xsd:complexType> 

    <xsd:complexType name="option" mixed="true"> 
    <xsd:annotation> 
     <xsd:documentation><![CDATA[ 
     Contains a constraint option definition. The name of the option 
     should be given in the "name" option. 

     May contain a single value, multiple "value" elements or multiple 
     "constraint" elements. 
     ]]></xsd:documentation> 
    </xsd:annotation> 
    <xsd:choice minOccurs="0"> 
     <xsd:element name="constraint" type="constraint" minOccurs="1" maxOccurs="unbounded" /> 
     <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" /> 
    </xsd:choice> 
    <xsd:attribute name="name" type="xsd:string" use="required" /> 
    </xsd:complexType> 

    <xsd:complexType name="value" mixed="true"> 
    <xsd:annotation> 
     <xsd:documentation><![CDATA[ 
     A value of an element. 

     May contain a single value, multiple "value" elements or multiple 
     "constraint" elements. 
     ]]></xsd:documentation> 
    </xsd:annotation> 
    <xsd:choice minOccurs="0"> 
     <xsd:element name="constraint" type="constraint" minOccurs="1" maxOccurs="unbounded" /> 
     <xsd:element name="value" type="value" minOccurs="1" maxOccurs="unbounded" /> 
    </xsd:choice> 
    <xsd:attribute name="key" type="xsd:string" use="optional" /> 
    </xsd:complexType> 
</xsd:schema> 
+0

Вы пытались включить панель инструментов веб-отладки Symfony2 и проверять свои объекты до использования 'FormBuilder', чтобы узнать, не указана ли информация о них как некорректная? –

+0

Недопустимая схема. Добавьте схему, которая используется для вашего вопроса. Схема может быть сгенерирована, по крайней мере, это может объяснить, почему она изменилась. – hakre

+0

@hakre: добавлена ​​схема. Обратите внимание, что он проверяет, когда copypasted на validator.w3.org. – Kaivosukeltaja

ответ

2

В конце концов это оказалось быть вызвано плохой версией libxml2 на нашем RHEL5.

Мы заметили, что наш сервисный центр перезагрузил систему при обновлении пакетов. Пакет libxml2 был обновлен до версии libxml2-2.6.26-2.1.21.el5_9.2, который имеет known serious problems, проверяя использование XML-схем с определенным контентом в них. Проблемы приводят к тому, что некоторые XML-файлы отказываются от проверки, даже если они действительны.

Проблема была исправлена ​​в сборке libxml2-2.6.26-2.1.22.el5. После обновления до этой версии формы снова начали работать.