السبب الأكثر شيوعًا لـ "java.lang.NullPointerException" عند التعامل مع ملفات XML؟

StackOverflow https://stackoverflow.com/questions/85370

  •  01-07-2019
  •  | 
  •  

سؤال

أقوى دليل لدي هو أن الكود الذي يتعامل مع ملفات XML الواردة يتلقى بالفعل ملفًا غير صالح/غير مكتمل ومن ثم يفشل في تحليل DOM.أي اقتراحات؟

هل كانت مفيدة؟

المحلول

الملف غير المكتمل هو بالتأكيد المكان المناسب لبدء البحث.سأقوم بطباعة الملف مباشرة قبل النقطة التي تقوم بتحليله لمعرفة ما يتم إرساله إلى المحلل اللغوي.إذا كان غير مكتمل سيكون واضحا.إذا كان غير صالح، سيكون لديك القليل من البحث للقيام به.

نصائح أخرى

سيكون تخميني الأول هو أن الكود الذي يستخدم DOM يتعامل مع العناصر التي تم وضع علامة عليها على أنها اختيارية في DTD على أنها إلزامية.

تم التعديل للإضافة:ما أعنيه هو أنه ما لم تقم بالتحقق من صحة DTD، فلا يمكنك أن تتوقع شيئًا مثل ما يلي (على سبيل المثال باستخدام dom4j) لإرجاع أي شيء غير فارغ.

doc.selectSingleNode("//some/element/in/a/structure");

وينطبق الشيء نفسه بالطبع إذا كنت تقوم بربط استدعاءات التنقل بين العناصر معًا، أو بشكل عام لا تتحقق من قيم الإرجاع قبل استخدامها.

يجب أن يكون لديك تتبع مكدس يشير إلى المكان الذي يتم فيه طرح NPE.يجب أن يؤدي ذلك إلى تضييق عدد المتغيرات التي يمكن أن تكون فارغة.بدلاً من إخراج مصحح الأخطاء أو printf، أقترح إضافة عمليات التحقق المناسبة وطرح استثناء حيث يمكن اكتشاف الخطأ بمجرد اكتشافه.إنها عادة جيدة يجب اتباعها لتجنب المشاكل الغامضة لاحقًا.

من الناحية المثالية، يجب أن تقوم بتشغيل تطبيق Java الخاص بك داخل مصحح أخطاء، وبالتالي عند طرح استثناء لم يتم اكتشافه، يمكنك فحص مجموعة الاستدعاءات والمتغيرات وما إلى ذلك ومعرفة السطر الذي تسبب في التعطل بالضبط، وربما البيانات الفارغة التي تم استخدامها.

إذا لم تتمكن من استخدام مصحح الأخطاء لأي سبب من الأسباب، فقم بتجميع التطبيق الخاص بك مع دعم تصحيح الأخطاء، وأضف معالج استثناء لهذا الخطأ المحدد، واطبع تتبع المكدس.مرة أخرى، سيُظهر هذا بالضبط السطر الموجود في الملف الذي تسبب في العطل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top