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?

tanda batas
sumber
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 ...

Daniel Sloof
sumber
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