Miglioramento dei messaggi di errore per errori di compilazione XML


14

Magento è abbastanza protettivo (come dovrebbe essere) per quanto riguarda la visualizzazione degli errori. Quando la modalità sviluppatore è abilitata (come dovrebbe essere durante lo sviluppo), l'applicazione consente al feedback degli errori di runtime di comunicare all'utente. Per errori di compilazione XML sebbene questo feedback sia abbastanza inutile:

Errore irreversibile: eccezione non rilevata "Eccezione" con messaggio "Avvertenza: simplexml_load_string (): Entità: riga 4: errore parser: dichiarazione XML consentita solo all'inizio del documento in [...] / lib / Varien / Simplexml / Config. php on line 510 'in [...] app / code / core / Mage / Core / Functions.php sulla linea 245

Ciò risulta dalla Varien_Simplexml_Config::loadFile()presentazione ::loadString()con una stringa che non può essere analizzata:

public function loadFile($filePath)
{
    if (!is_readable($filePath)) {
        //throw new Exception('Can not read xml file '.$filePath);
        return false;
    }

    $fileData = file_get_contents($filePath);
    $fileData = $this->processFileData($fileData);
    return $this->loadString($fileData, $this->_elementClass);
}

Esistono diverse soluzioni potenziali, incluso l'utilizzo libxml_use_internal_errors, ma il metodo di chiamata non comunica il $filePathparametro, quindi il contesto andrebbe perso. Una possibilità sarebbe quella di lanciare un'eccezione più esplicita:

public function loadFile($filePath)
{
    if (!is_readable($filePath)) {
        //throw new Exception('Can not read xml file '.$filePath);
        return false;
    }

    $fileData = file_get_contents($filePath);
    $fileData = $this->processFileData($fileData);
    try{
        return $this->loadString($fileData, $this->_elementClass);
    }
    catch (Exception $e){
        Mage::throwException (
            sprintf(
                "%s: error parsing %s:\r\n%s",
                __METHOD__,
                $filePath,
                $e->getMessage()
            )
        );
    }
}

Questo almeno fornisce un output come il seguente:

Errore irreversibile: eccezione non rilevata "Mage_Core_Exception" con messaggio " Varien_Simplexml_Config :: loadFile: errore nell'analisi [...] / app / code / local / Some / Example / etc / config.xml : avviso: simplexml_load_string (): entità: riga 4 : errore parser: dichiarazione XML consentita solo all'inizio del documento in [...] / lib / Varien / Simplexml / Config.php sulla riga 534 'in [...] / app / Mage.php sulla riga 594

Ci sono alcuni vantaggi / svantaggi / approcci alternativi da considerare qui?


Mi sento come un modulo di comunità per migliorare alcuni di questi messaggi di errore core sarebbe epico. L'altro messaggio di errore che è davvero negativo è quando non riesce a trovare un dato phtml.
Kalenjordan,

Risposte:


14

L'approccio che prendo sempre è un semplice one-liner:

find . -type f -name '*.xml' -exec xmllint --noout {} \;

libxml2-utils richiesto però ...


1
e mostra falsi positivi nei file wsi:namespace error : xmlns:typens: 'urn:{{var wsdl.name}}' is not a valid URI
Alex,

Soluzione: find . -type f -not -name 'wsi.xml' -not -name 'wsdl.xml' -not -name 'wsdl2.xml' -name '*.xml' -exec xmllint --noout {} \;(sentiti libero di modificare la risposta)
Alex,

Per config.xml: sono un fan difind . -type f -name 'config.xml' -exec xmllint --noout {} \;
benmarks,

@Alex Sto ricevendo lo stesso errore, hai risolto questo?
Butterfly,

Hai provato la linea che ho pubblicato?
Alex,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.