מישהו יכול לתת לי הסבר טוב על JAXB? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

מישהו יכול לתת לי הסבר טוב על JAXB?


FARKASH7

Recommended Posts

אהלן.

יש לי קבצי xsd עם מבנה שאני צריך ליצור מהם אובייקטים, וקבצי xml שמהם אני צריך להזין ערכים לאובייקטים.

הבנתי שהדרך הכי פשוטה לעשות את זה היא בעזרת JAXB.

הבעיה שאני לא ממש מצליח להבין איך לעשות את זה.

קראתי, הבנתי שמה שאני צריך לעשות הוא unmarshalling, אבל לא ממש הצלחתי למצוא הסבר טוב עם דוגמאות טובות בגוגל.

אולי יש כאן מישהו שיכול לעזור לי בעזרת דוגמה פשוטה, לתת קוד פשוט שעושה את זה לקובץ מסוים, ולהסביר לי מה הוא עושה?

תודה רבה מראש.

קישור לתוכן
שתף באתרים אחרים

דבר ראשון אתה צריך ליצור קוד מתוך ה-xsd. הדרך לעשות את זה היא באמצעות הכלי xjc (הוא אמור לשבת בתיקייה של ה-jdk) ככה:

xjc -p <src> -p <package> <xsd>

<src> - התיקייה בה אתה רוצה שישבו הקבצים שיווצרו (נניח, תיקיית ה-src של הפרוייקט שלך)

<package> - ה-package שיהיה לכל הקוד שנוצר

<xsd> - קובץ ה-xsd

דבר שני, בקוד עצמו אתה צריך ליצור unmarshaller ולהפעיל אותו, ככה:

JAXBContext context = JAXBContext.newInstance(MyClass.class);
MyClass obj = (MyClass) context.createUnmarshaller().unmarshal(xmlFilePath);

כשבמקום MyClass אתה צריך לתת את המחלקה שנוצרה ע"י ה-xjc ומייצגת את השורש של ה-xml. הפונקציה unmarshal יכולה לקבל קובץ בכל מיני צורות (File, InputStream וכו').

יכולות להיות בעיות מסויימות עם xjc - אני לדוגמה נתקלתי בבעיה כשהשתמשתי בטיפוסים אנונימיים ב-xml, כי לפעמים הוא יתן לך אותו שם עבורם בקוד שנוצר, וזה יגרום להתנגשות. אז תנסה להריץ את ה-xjc ואם יש בעיות אז אתה מוזמן להעלות אותן כאן.

קישור לתוכן
שתף באתרים אחרים

תודה על התגובה.

לא הבנתי את החלק הראשון שנוגע לxjc. מה אני צריך ליצור בדיוק? קובץ עם השורה הזו?

האמת שכמעט התייאשתי, ועברתי לעבודה ידנית.

סך הכל הקובץ לא גדול ומספר המחלקות גם קטן, אז רק בזמן שאני מנסה להבין איך העסק עובד יכולתי לבנות את כל המחלקות ידנית ולפרסר את קבצי הxml ידנית.

בכל מקרה נתקלתי גם בסרטון הזה ביוטיוב, הוא נעזר באקליפס כדי ליצור את המחלקות מקבצי הxsd.

"

אבל כשאני מנסה להשתמש בכלי האוטומטי של אקליפס, ומסמן V על JAXB, ונכנס לfurther configuration(מופיע בסרטון ב1:14), אני מקבל שגיאה : "The configured runtime is insufficient to provide an implementation for JAXB 2.1"

לא מצליח להבין מה הבעיה שלו.

מותקן אצלי jdk האחרון, ואני עובד עם java ee ide

קישור לתוכן
שתף באתרים אחרים

שניצל ניסיתי לעבוד עם הכלי האוטומטי של אקליפס, וגם ידנית ובשתי המקרים קיבלתי את השגיאה הבאה:

Error: Could not find or load main class com.sun.tools.internal.xjc.XJCFacade

מה הוא רוצה? לפי מה שאני מבין הוא מוגדר על הjre במקום על הjdk, אבל הגדרתי אותו על הjdk, לכן אני לא מבין למה הוא ממשיך לזרוק את השגיאה הזו.

דרך אגב הוא עושה לי את זה גם אם אני סתם עושה תוכנית שמדפיסה שורה. אני מבין שאני מפספס משהו ממש בסיסי ודבילי, אשמח לעזרה.

עריכה: התקנתי מחדש את java jdk. עכשיו תודה לאל אני כן מצליח להדפיס שורה, אבל עדיין מקבל את הeror שהזכרתי כאשר אני לוחץ כפתור ימני על קובץ הxsd ולוחץ על genereate ואז jaxb classes.

עריכה נוספת

לאחר ההתקנה מחדש הגדרתי את סביבת הריצה על הjdk והודעת השגיאה נעלמה, הצלחתי ליצור ObjectFactory וReit.

נמשיך לעדכן אם אתקל בקשיים.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...