سؤال

كنت أحاول إضافة مخطط XML إلى مشروع EJB موجود.يتم استخدام JAXB لربط مخطط XML بفئة Java.نظرًا لأننا سنستخدم محرك البحث للزحف عبر DTO عندما يكون EJB في الجلسة.

لم أتمكن من العثور على أي طريقة مباشرة لتعيين ملف فئة الكيان إلى مخطط XML.

الطريقة الوحيدة التي يمكننا تحقيقها حتى الآن هي إنشاء خدمات الويب، وإنشاء WSDL الذي ينشئ مخطط xml (XSD) ثم تحليل ملف XSD من خلال JAXB (أمر xjc) لإنشاء ملفات فئة جافا.الآن باستخدام ملف mapping-binding.xml يمكننا تعيين ملف فئة XML وJava.

ولكن المشكلة الآن مرة أخرى هي كيفية ربط ذلك بفئة الكيان.

وهذا ما نريد تحقيقه:

  • كائن بيانات XML مع مخطط XML، (هذا موجود بالفعل في مواصفات JAXB).
  • يقوم Entity Bean بعد ذلك بتوسيع أو لديه واجهة لكائن JAXB هذا.
  • تتم إدارة جميع وظائف الثبات بواسطة Entity Bean...
  • ستحتوي Entity Bean بعد ذلك على ميزات XML Marshalling وUnMarshalling الموجودة في JAXB.
  • يمكن استرداد كائن القيمة في شكل ثنائي أو نموذج XML من كائن Entity Bean.
  • يمكن لـ JSP بسهولة استخراج مخطط XML وبيانات XML من كائن القيمة وتنفيذ العمليات عليه مثل تحويلات XSL.

حجتي هي أن Entity Beans ليس لديها طريقة قياسية للتواصل مع كائنات JAXB.

قد يكون Castor هو الحل، ولكن يتعين علينا مرة أخرى تنفيذ خدمات الويب أو استخدام castor JDO.

لقد وجدت أن XStream مفيد جدًا لأنه يستخدم فئة محول يمكنك من خلالها استدعاء كائنات فئة فول الكيان وإنشاء ملف xml.لكنني لم أكن أفضل استخدام فئة أخرى ولكنني أدمج الوظائف الموجودة في فئة الفول الموجودة.

هل تستطيع مساعدتي في هذا الموقف؟


سأخبرك بما أحاول تحقيقه بالفعل.أقوم بإنشاء محرك بحث سيتم استحضاره أثناء جلسة وحدة جافا للأعمال وسيستخدم الزاحف من خلال DTO وسيحصل على اللقطة بتنسيق XML.البحث سيكون على معايير مختلفة.

يعد Lucene أحد أدوات محرك البحث ولكنه يستخدم بعد ذلك خصائصه وملفاته الخاصة (سيعمل بشكل مستقل أكثر)

لدي بالفعل DTO التي تستخدمها خدمات الويب للتواصل بين تطبيق PHP وJava (طبقة EJB).كنت أرغب في إعادة استخدام DTO في jaxb كمتتبع للحصول على الإخراج من الجداول في XML وهو ما لا أستطيع القيام به لأن JAXB يستخدم فئاته التي تم إنشاؤها من خلال مخطط xml.كما قلت، لم أجد حتى الآن طريقة لتوجيه JAXB إلى فصول الفول.

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

المحلول

قد لا يكون ربط نموذج البيانات الخاص بك (وحدات الكيان) بواجهة XML الخاصة بك هو أفضل فكرة في العالم؛يمنعك من تغيير أحدهما دون تغيير الآخر.

لست متأكدًا بنسبة 100% من أنني أفهم ما تحاول القيام به، ولكن أعتقد أن هناك طريقة لتوجيه JAXB إلى توسيع الفصول الدراسية بدلاً من إنشاء فئات جديدة.يمكنك إنشاء وحدات الكيان الخاصة بك كالمعتاد، وجعل وحدات الفول التي تم إنشاؤها بواسطة JAXB تقوم بتوسيع تلك الوحدات بالمعلومات الإضافية.

أستطيع أن أقول إن الحصول على مثيلات Entity Bean من مكان ما آخر من طبقة الثبات الخاصة بك (مثل إلغاء تسلسلها من XML) ستكون ضخم مشكلة لك.

لاحظ أيضًا أن استخدام XML للتواصل بين تطبيقات Java (مثل طبقة JSP/Servlet وEJB) يعد فكرة سيئة؛التنظيم والإسهاب الإضافي لـ XML لا يشتري لك سوى القليل جدًا ؛سيكون إجراء تسلسل للكائنات عبر RMI (وهو ما سيفعله EJB لك) أسهل بكثير في التنفيذ والاختبار والصيانة.

نصائح أخرى

إكليبس لينك جاكسب (موكسي) يمكن استخدامها لتعيين كيانات JPA إلى XML.

لمزيد من المعلومات، راجع:

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