From d6f08809ddf21947e4d073c8da160390a63a6efb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Haso=C5=88?= Date: Tue, 30 Oct 2012 11:58:44 +0100 Subject: [PATCH] [Validator] Added dependency to Config component to loading XML files --- .../Mapping/Loader/XmlFileLoader.php | 51 ++----------------- src/Symfony/Component/Validator/composer.json | 6 ++- 2 files changed, 9 insertions(+), 48 deletions(-) diff --git a/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php b/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php index 4925abb44d..6b25f18817 100644 --- a/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php +++ b/src/Symfony/Component/Validator/Mapping/Loader/XmlFileLoader.php @@ -13,6 +13,7 @@ namespace Symfony\Component\Validator\Mapping\Loader; use Symfony\Component\Validator\Exception\MappingException; use Symfony\Component\Validator\Mapping\ClassMetadata; +use Symfony\Component\Config\Util\XmlUtils; class XmlFileLoader extends FileLoader { @@ -185,54 +186,12 @@ class XmlFileLoader extends FileLoader */ protected function parseFile($file) { - $internalErrors = libxml_use_internal_errors(true); - $disableEntities = libxml_disable_entity_loader(true); - libxml_clear_errors(); - - $dom = new \DOMDocument(); - $dom->validateOnParse = true; - if (!$dom->loadXML(file_get_contents($file), LIBXML_NONET | (defined('LIBXML_COMPACT') ? LIBXML_COMPACT : 0))) { - libxml_disable_entity_loader($disableEntities); - - throw new MappingException(implode("\n", $this->getXmlErrors($internalErrors))); - } - - libxml_disable_entity_loader($disableEntities); - - if (!$dom->schemaValidate(__DIR__.'/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd')) { - throw new MappingException(implode("\n", $this->getXmlErrors($internalErrors))); - } - - $dom->normalizeDocument(); - - libxml_use_internal_errors($internalErrors); - - foreach ($dom->childNodes as $child) { - if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) { - throw new MappingException('Document types are not allowed.'); - } + try { + $dom = XmlUtils::loadFile($file, __DIR__.'/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd'); + } catch (\Exception $e) { + throw new MappingException($e->getMessage(), $e->getCode(), $e); } return simplexml_import_dom($dom); } - - protected function getXmlErrors($internalErrors) - { - $errors = array(); - foreach (libxml_get_errors() as $error) { - $errors[] = sprintf('[%s %s] %s (in %s - line %d, column %d)', - LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR', - $error->code, - trim($error->message), - $error->file ? $error->file : 'n/a', - $error->line, - $error->column - ); - } - - libxml_clear_errors(); - libxml_use_internal_errors($internalErrors); - - return $errors; - } } diff --git a/src/Symfony/Component/Validator/composer.json b/src/Symfony/Component/Validator/composer.json index a52d33bb21..e3cb106914 100644 --- a/src/Symfony/Component/Validator/composer.json +++ b/src/Symfony/Component/Validator/composer.json @@ -21,12 +21,14 @@ "require-dev": { "symfony/http-foundation": "2.2.*", "symfony/locale": "2.2.*", - "symfony/yaml": "2.2.*" + "symfony/yaml": "2.2.*", + "symfony/config": "2.2.*" }, "suggest": { "doctrine/common": ">=2.1,<2.4-dev", "symfony/http-foundation": "2.2.*", - "symfony/yaml": "2.2.*" + "symfony/yaml": "2.2.*", + "symfony/config": "2.2.*" }, "autoload": { "psr-0": { "Symfony\\Component\\Validator\\": "" }