Meningkatkan pesan kesalahan untuk kesalahan kompilasi XML


14

Magento cukup protektif (sebagaimana mestinya) mengenai tampilan kesalahan. Ketika mode pengembang diaktifkan (sebagaimana mestinya selama pengembangan), aplikasi memungkinkan umpan balik kesalahan runtime naik ke pengguna. Untuk kesalahan kompilasi XML meskipun umpan balik ini tidak berguna:

Kesalahan fatal: Pengecualian tanpa pengecualian 'Pengecualian' dengan pesan 'Peringatan: simplexml_load_string (): Entitas: baris 4: kesalahan parser: Deklarasi XML hanya diizinkan pada awal dokumen di [...] / lib / Varien / Simplexml / Config. php on line 510 'di [...] app / code / core / Mage / Core / functions.php on line 245

Ini hasil dari Varien_Simplexml_Config::loadFile()penyajian ::loadString()dengan string yang tidak dapat diuraikan:

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);
}

Ada beberapa solusi potensial, termasuk menggunakan libxml_use_internal_errors, tetapi metode panggilan tidak mengkomunikasikan $filePathparam, sehingga konteksnya akan hilang. Satu kemungkinan adalah dengan melemparkan pengecualian yang lebih eksplisit:

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()
            )
        );
    }
}

Ini setidaknya memberikan output seperti berikut:

Kesalahan fatal: Pengecualian tanpa tertangkap 'Mage_Core_Exception' dengan pesan ' Varien_Simplexml_Config :: loadFile: error parsing [...] / app / code / local / Some / Example / config.xml : Peringatan: simplexml_load_string (): Entity: line 4 : kesalahan parser: Deklarasi XML hanya diizinkan pada awal dokumen di [...] / lib / Varien / Simplexml / Config.php on line 534 'di [...] / app / Mage.php on line 594

Apakah ada beberapa keuntungan / kerugian / pendekatan alternatif untuk dipertimbangkan di sini?


Saya merasa seperti modul komunitas untuk meningkatkan beberapa pesan kesalahan inti buruk ini akan epik. Pesan kesalahan lain yang benar-benar buruk adalah ketika tidak dapat menemukan phtml yang diberikan.
kalenjordan

Jawaban:


14

Pendekatan yang selalu saya ambil adalah one-liner sederhana:

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

diperlukan libxml2-utils ...


1
dan menunjukkan positif palsu dalam file wsi:namespace error : xmlns:typens: 'urn:{{var wsdl.name}}' is not a valid URI
Alex

Penanganan masalah: find . -type f -not -name 'wsi.xml' -not -name 'wsdl.xml' -not -name 'wsdl2.xml' -name '*.xml' -exec xmllint --noout {} \;(jangan ragu untuk mengedit jawabannya)
Alex

Untuk config.xml: Saya penggemarfind . -type f -name 'config.xml' -exec xmllint --noout {} \;
patok

@ Alex Saya mendapatkan kesalahan yang sama, apakah Anda sudah memperbaikinya?
Butterfly

Apakah Anda mencoba baris yang saya posting?
Alex
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.