עבור לתוכן

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

Featured Replies

פורסם

אהלן.

יש לי קבצי 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

נערך על-ידי FARKASH7

פורסם
  • מחבר

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

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.

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

נערך על-ידי FARKASH7

ארכיון

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

דיונים חדשים