باستخدام XML 1.1 في AXIS2
-
19-08-2019 - |
سؤال
لديّ خدمة ويب وعميل يمرران حول سلاسل تحتوي على مراجع أحرف مثل (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 غير صالحة. من الممكن مواجهة الآثار الجانبية.