كيفية إرسال حزمة XML مخصصة باستخدام Java's Smack API؟
سؤال
أستخدم Smack API في Java للاتصال بخادم XMPP.
أريد إرسال حزمة رسائل مخصصة مثل هذا: Genacodicetagpre
أظن أنني قمت بإنشاء حزمة تنفيذ خاصة بي باستخدام ملف XML هذا في طريقة toXML () الخاصة به.لكن يبدو أن هذا لا يعمل.
سيكون موضع تقدير أي مساعدة.
المحلول
أنت بحاجة إلى تحديد فئة مخصصة يجب أن تنفذ ExtensionElement (كما هو موضح بواسطة @ التدفق )
يتوفر شرح مفصل للغاية ينتج عنه المقطع التالي في هذه الإجابة
Genacodicetagpreحيث يكون الرد إضافة مخصصة تحتوي على
- العنصر (رد)
- مساحة الاسم (شايان: رد)
تتوفر قائمة مساحات أسماء xmpp الافتراضية على موقع XMPP الرسمي
نصائح أخرى
لا أعرف سبب رغبتك في إضافة سمات مخصصة إلى الرسالة. سيكون هذا مشكلة بالنسبة للعميل وقد يتسبب في حدوث مشكلات على الخادم أيضًا لأنه لن يتطابق مع مخطط مقطع الرسالة.
من ناحية أخرى ، يمكن التعامل مع محتوى الرسالة بسهولة كما قالFemi بامتداد الحزمة. تحتاج إلى إنشاء MyExtension الذي يمتد PacketExtension ، و toXML () في هذا الفصل سيعيد مقطعك المخصص.
يمكنك إنشاء وإرسال رسالتك المخصصة عن طريق: Genacodicetagpre
لقراءة المقطع ، ستحتاج إلى تسجيل مزود ، والذي سينشئ ويعيد PacketExtension المخصص الخاص بك. يجب عليك إلقاء نظرة على EmbeddedExtensionProvider لهذا لأنه يعالج تحليل العلامات نيابةً عنك ، وبالتالي يبسط العملية.
اكتشفت مؤخرًا كيفية إضافة مقطع مخصص إلى رسالتك.كان الأمر سهلاً للغاية بمجرد أن اكتشفت ذلك.أنا فقط بحاجة إلى توسيع فئة الرسائل القياسية مع فئة الرسائل المخصصة. Genacodicetagpre
ثم استخدم الفصل المخصص لإرسال رسائل مثل هذه: Genacodicetagpre
ستظهر رسالة XML الخاصة بك على النحو التالي: Genacodicetagpre
يمكنك استخدام حزمة الامتداد لهذا: للأسف لا توجد وثائق أو أمثلة جيدة لاستخدام امتدادات الحزمة. لقد استعرضت سابقًا هذا السؤال الذي لم يتم حله والذي يحتوي على مثال للشفرة ولكن لم أتمكن من تشغيله : لم أحصل على أي استثناءات ولكنها ببساطة لم تعمل لأن الملحق لم يتم الاتصال به وانتقلت إلى مجرد تشفير بياناتي في نص الرسالة.
تحرير: للأجيال القادمة ، تمكنت من الحصول على الكود التالي يعمل. ويستخدم فئات DOM4J رمزًا ترميزًا عامًا ورمزًا ترميزًا عامًا. Genacodicetagpre
مرح باعتدال: واجهت إجابتي الخاصة بعد عام أثناء محاولتي في الواقع حل هذه المشكلة من أجل مشروع حقيقي (على عكس الترقيع كما فعلت من قبل) وبما أنني لم أستطع التخلي عنها فقط ، كان علي أن أفهم خارج. أعتقد أنني سأحتاج هذه الإجابة مرة أخرى لذا ها هي. إذن: ذاكرتي في السماء.
EDIT: تم العثور على طريقة أبسط للقيام بذلك: Genacodicetagpre
شيء يجب ملاحظته: أدت محاولة إضافة أشياء معينة (في حالتي ، محاولة إضافة عنصر تأخير ) إلى عدم توجيه الحزمة. شيء ما في Openfire ابتلعه ، لذلك هذا شيء يجب مراقبته.