การปรับปรุงข้อความแสดงข้อผิดพลาดสำหรับข้อผิดพลาดการรวบรวม XML


14

วีโอไอพีนั้นมีการป้องกันค่อนข้างดี (ตามที่ควรจะเป็น) เกี่ยวกับการแสดงข้อผิดพลาด เมื่อเปิดใช้งานโหมดผู้พัฒนา (ตามที่ควรจะเป็นในระหว่างการพัฒนา) แอปพลิเคชันจะอนุญาตให้เกิดข้อผิดพลาดรันไทม์เพื่อทำให้เกิดฟองขึ้นกับผู้ใช้ สำหรับข้อผิดพลาดในการรวบรวม XML แม้ว่าข้อเสนอแนะนี้จะค่อนข้างไร้ประโยชน์:

ข้อผิดพลาดร้ายแรง: ข้อยกเว้นที่ไม่ได้รับการยกเว้น 'ข้อยกเว้น' พร้อมข้อความ 'คำเตือน: simplexml_load_string (): รายการ: บรรทัดที่ 4: ข้อผิดพลาดในการแยกวิเคราะห์: การประกาศ XML อนุญาตเฉพาะการเริ่มต้นเอกสารใน [... ] / lib / Varien / Simplexml / Config php ในบรรทัด 510 'ในแอป [... ] / รหัส / core / Mage / Core / Functions.php ที่บรรทัด 245

นี่เป็นผลมาจากVarien_Simplexml_Config::loadFile()การนำเสนอ::loadString()ด้วยสตริงที่ไม่สามารถแยกวิเคราะห์ได้:

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

มีวิธีแก้ปัญหาที่อาจเกิดขึ้นมากมายรวมถึงการใช้libxml_use_internal_errorsแต่วิธีการโทรไม่ได้สื่อสาร$filePathพารามิเตอร์ดังนั้นบริบทจะหายไป ความเป็นไปได้อย่างหนึ่งคือการโยนข้อยกเว้นที่ชัดเจนมากขึ้น:

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

อย่างน้อยนี้ให้ผลลัพธ์ดังนี้:

ข้อผิดพลาดร้ายแรง: ข้อยกเว้นที่ไม่ได้รับการแปล 'Mage_Core_Exception' พร้อมข้อความ ' Varien_Simplexml_Config :: loadFile: ข้อผิดพลาดในการแยกวิเคราะห์ [... ] / app / รหัส / local / บางคน / ตัวอย่าง / etc / config.xml : คำเตือน: simplexml_load_string (): Entity: line 4 : ข้อผิดพลาดในการแยกวิเคราะห์: การประกาศ XML อนุญาตเฉพาะที่จุดเริ่มต้นของเอกสารใน [... ] / lib / Varien / Simplexml / Config.php ที่บรรทัด 534 'ใน [... ] / app / Mage.php ที่บรรทัด 594

มีข้อดี / ข้อเสีย / วิธีอื่นในการพิจารณาที่นี่หรือไม่?


ฉันรู้สึกเหมือนโมดูลชุมชนเพื่อปรับปรุงข้อความแสดงข้อผิดพลาดหลักที่ไม่ดีเหล่านี้จะเป็นมหากาพย์ ข้อความแสดงข้อผิดพลาดอื่น ๆ ที่ไม่ดีคือเมื่อไม่สามารถหา phtml ที่ระบุได้
kalenjordan

คำตอบ:


14

วิธีการที่ฉันมักจะเป็นหนึ่งซับง่าย:

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

ต้องใช้ libxml2-utils ...


1
และแสดงผลบวกปลอมในไฟล์ wsi:namespace error : xmlns:typens: 'urn:{{var wsdl.name}}' is not a valid URI
Alex

วิธีแก้ปัญหา: find . -type f -not -name 'wsi.xml' -not -name 'wsdl.xml' -not -name 'wsdl2.xml' -name '*.xml' -exec xmllint --noout {} \;(อย่าลังเลที่จะแก้ไขคำตอบ)
อเล็กซ์

สำหรับ config.xml: ฉันเป็นแฟนคลับของfind . -type f -name 'config.xml' -exec xmllint --noout {} \;
benmarks

@Alex ฉันได้รับข้อผิดพลาดเดียวกันคุณมีการแก้ไขหรือไม่
ผีเสื้อ

คุณลองบรรทัดที่ฉันโพสต์หรือไม่?
Alex
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.