سؤال

لديّ خدمة ويب وعميل يمرران حول سلاسل تحتوي على مراجع أحرف مثل (0x1a). هذه غير صالحة في XML 1.0 ولكنها صالحة في XML 1.1. محلل XML المحور هو رمي الاستثناءات بسبب مراجع الأحرف هذه. هل هناك طريقة لإجبارها على تحليل الاستجابة كـ XML 1.1 ، أو لإدراج إعلان XML؟ (لا يوجد حاليًا واحدة.) نظرت إلى استخدام المعالجات ، لكن ما أفهمه هو أنه يتم استدعاءهم بعد تحليل XML بالفعل.

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

المحلول

هل تمر في InputStream أو Reader؟ إذا كان الأمر كذلك ، يمكنك لف المصدر في فئة أخرى (مثل BufferedReader يعمل) ولكن استخدمه لإسقاط الشخصيات غير الضرورية.

نصائح أخرى

أعتقد أنك ستواجه وقتًا عصيبًا جدًا مع هذا. أفهم أن معيار WSDL 2.0 مبني على XML 1.0. إذن ما نوع الخدمة التي تتصل بها والتي تصف نفسها بـ WSDL (على افتراض XML 1.0) ثم تبدأ في إرسال رسائل مع أحرف XML 1.1 فيه؟

عندما تحدد خدمة AXIS2 ، يمكنك تحديد المعالجات التي لديها في ملف Services.xml. على سبيل المثال على هذه الصفحة لديهم خدمة استخدمت org.apache.axis2

هناك خيار آخر - لجعل المحلل المحلل يعامل المدخلات على أنها XML 1.1. نظرًا لأن AXIS2 يستخدم Woodstox Earser ، يمكنك تمديد WstxInputFactory والتجاوز طريقة createPrivateConfig():

@Override
public ReaderConfig createPrivateConfig() {
    ReaderConfig config = super.createPrivateConfig();
    config.enableXml11(true);
    return config;
}

ثم استخدم هذا المصنع المخصص عبر خاصية النظام: -djavax.xml.stream.xmlinputfactory = mypackage.mywstxinputFactory

لاحظ أن مثل هذا الحلول مخصص فقط للحالات التي لا يمكنك فيها تغيير خدمة الويب التي تجرها الدواب التي تنتج XML غير صالحة. من الممكن مواجهة الآثار الجانبية.

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