كيفية إرسال حزمة XML مخصصة باستخدام Java's Smack API؟

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

  •  29-10-2019
  •  | 
  •  

سؤال

أستخدم Smack API في Java للاتصال بخادم XMPP.

أريد إرسال حزمة رسائل مخصصة مثل هذا: Genacodicetagpre

أظن أنني قمت بإنشاء حزمة تنفيذ خاصة بي باستخدام ملف XML هذا في طريقة toXML () الخاصة به.لكن يبدو أن هذا لا يعمل.

سيكون موضع تقدير أي مساعدة.

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

المحلول

أنت بحاجة إلى تحديد فئة مخصصة يجب أن تنفذ ExtensionElement (كما هو موضح بواسطة @ التدفق )

يتوفر شرح مفصل للغاية ينتج عنه المقطع التالي في هذه الإجابة

Genacodicetagpre

حيث يكون الرد إضافة مخصصة تحتوي على

  1. العنصر (رد)
  2. مساحة الاسم (شايان: رد)

تتوفر قائمة مساحات أسماء xmpp الافتراضية على موقع XMPP الرسمي

نصائح أخرى

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

من ناحية أخرى ، يمكن التعامل مع محتوى الرسالة بسهولة كما قالFemi بامتداد الحزمة. تحتاج إلى إنشاء MyExtension الذي يمتد PacketExtension ، و toXML () في هذا الفصل سيعيد مقطعك المخصص.

يمكنك إنشاء وإرسال رسالتك المخصصة عن طريق: Genacodicetagpre

لقراءة المقطع ، ستحتاج إلى تسجيل مزود ، والذي سينشئ ويعيد PacketExtension المخصص الخاص بك. يجب عليك إلقاء نظرة على EmbeddedExtensionProvider لهذا لأنه يعالج تحليل العلامات نيابةً عنك ، وبالتالي يبسط العملية.

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

ثم استخدم الفصل المخصص لإرسال رسائل مثل هذه: Genacodicetagpre

ستظهر رسالة XML الخاصة بك على النحو التالي: Genacodicetagpre

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

تحرير: للأجيال القادمة ، تمكنت من الحصول على الكود التالي يعمل. ويستخدم فئات DOM4J رمزًا ترميزًا عامًا ورمزًا ترميزًا عامًا. Genacodicetagpre

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

EDIT: تم العثور على طريقة أبسط للقيام بذلك: Genacodicetagpre

شيء يجب ملاحظته: أدت محاولة إضافة أشياء معينة (في حالتي ، محاولة إضافة عنصر تأخير ) إلى عدم توجيه الحزمة. شيء ما في Openfire ابتلعه ، لذلك هذا شيء يجب مراقبته.

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