مخطط تسلسل المنطق

الرسم البياني للتسلسل أدناه مفيد لفهم وظيفة محلل الملفات. يجب أن تقوم الفئة المحددة بتنفيذ واجهات جافا FileParser وFileParser2 الموضحة في ملف jar D1 جيت واي الشبكات الذكي لتكون مؤهلة كمحلل للملف. للمزيد من المعلومات، راجع واجهة FileParser وواجهة FileParser2.

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

  1. المثيل والتهيئة

    • setProcessor()

    • setInputStream()

    • setStartPosition()

  2. المعاملة

    • getPosition()

    • getNextStream()

  3. معالجة الاستثناءات

    • getCurrentInputPortion()

مرحلة المثيل والتهيئة

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

مرحلة المعاملة

بمجرد تهيئة محلل الملف، يقوم معالج الملف العام باستخدام مثيل محلل الملف لإنشاء بنية XML عادي. يحدث هذا مع استدعاء أسلوب getNextStream () على محلل الملف.

في كل استدعاء، يقوم محلل الملف بإرجاع XML عادي واحد. تستمر استدعاءات محلل الملف حتى يتم إرجاع الفارغ من محلل الملف. تشير فارغ إلى نهاية الملف وإشارة إلى أن التحليل قد اكتمل لملف معين. يقوم معالج الملف العام بوقف استدعاء getNextStream () لملف مدخلات معين عندما يتلقى فارغ من محلل الملف.

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

مرحلة معالجة الاستثناءات

يمكن تصنيف معالجة الاستثناءات داخل محلل الملف إلى مرحلتين: التفاعلي والاسترداد:

المرحلة التفاعلية

تتضمن هذه المرحلة التقاط استثناء وتقديم تقرير إلى معالج الملف العام. يتم تحقيق ذلك من خلال استدعاء أسلوب saveInvalidRow () على معالج الملف العام (this.fileProcessor).

لاحظ أنه عند حدوث استثناء، لن يتم إجراء أي تحليل إضافي ويتم إرجاع الفارغ من getNextStream ().

إذا فشل أحدهم في إرجاع الفارغ، فيمكنك العثور على أخطاء مثل "النتيجة الجيدة والسيئة المتزامنة التي يتم إرجاعها بواسطة محلل الملفات" في سجل خادم Weblogic.

عندما يتم إرسال استثناء إلى معالج الملف العام، فإنه يقوم بثلاثة أشياء:

  1. يقوم بإنشاء حمولة XML D1-PayloadErrorNotif ويقوم بتمريرها إلى سير رسائل OSB. تم نشر الرسالة في قائمة انتظار الإخطار من داخل نظام التحضير غير الورقي لمشروع BASE OSB.

  2. يقوم بزيادة متغير "حدث خطأ المعاملة" عن طريق استدعاء طريقة المرفق داخل D1 jar. يتم التقاط جميع الأخطاء التي تحدث خلال مدة تحليل الملف ويتم الإبلاغ عنها من خلال الرسالة D1-PayloadSummary - والتي يتم نشرها مرة أخرى في قائمة انتظار الإخطار.

  3. أخيرًا، يقوم بإنشاء ملف بيانات في دليل الخطأ مع جزء من البيانات الأولية التي تتم قراءتها عند حدوث الخطأ. كما يقوم بإنشاء ملف "واصف الملف المرفوض" (RFD). يتوفر جزء المدخلات الأولي من خلال استخدام طريقة getCurrentInputPortion ()، والتي تمت مناقشتها أدناه.

كما هو موضح في الصورة أعلاه، تأخذ طريقة saveInvalidRow () ثلاث معلمات مدخلات:

  1. الموضع الذي بدأ فيه التحليل. سيتم كتابتها إلى ملف واصف الملف المرفوض. هذا مفيد في تحديد موقع الخطأ في ملف المدخلات.

  2. البيانات الأولية التي سيتم كتابتها في ملف بيانات الخطأ. يجب أن يكون مطابقًا لتنسيق الملف الوارد، ويجب أن يحتوي على بيانات تمت قراءتها منذ بدء استخدام طريقة الاستدعاء الحالي getNextStream (). سيسمح ذلك بتصحيح البيانات المضطربة ووضع ملف "ثابت" في مجلد وارد لمزيد من إعادة المعالجة.

  3. رسالة الخطأ التي تم الإبلاغ عنها في رسالة D1-PayloadErrorNotif. ملاحظة، يجب تعريف محتوى رسالة الخطأ بواسطة مطور محلل الملفات.

مرحلة الاسترداد

يجب عدم الخلط بين هذه المرحلة والاسترداد من الاستثناء المُعالَج الذي تمت مناقشته أعلاه. هذه الحالة هي عندما يحدث انقطاع تام في تحليل الملفات بسبب انقطاع التيار الكهربائي أو انقطاع خدمة شبكة الاتصال.

التحضير للاسترداد: يحتفظ معالج الملف العام بالمؤشر الداخلي لموضع القراءة الحالي للملف. يتم تحقيق ذلك بواسطة معالج الملف العام عن طريق استدعاء أسلوب getPosition () على محلل الملف قبل كل استدعاء لأسلوب getNextStream ().

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

عندما يبدأ المحلل اللغوي في التحليل مرة أخرى، يجب أن يحدث أمران للتأكد من أنه يبدأ التحليل من نقطة الاسترداد:

  1. قم بتخزين نقطة الاسترداد في حقل startPosition.

  2. دمج منطق تخطي لبدء المؤشر من نقطة الاسترداد.