java.lang.ClassCastException: javax.xml.bind.JAXBElement [solved]

วันนี้มีปัญหากับเจ้าจาวาอีกแล้วครับ java.lang.ClassCastException: javax.xml.bind.JAXBElement ตัวแดงเชียวล่ะ exception ตัวนี้เกิดขึ้นเนื่องจาก method unmarshal(…) return JAXBElement กับมาไม่ใช่ Object ที่เรา casting มันก็เลยฟ้องข้อผิดพลาดนี้ขึ้นมา

วิธีแก้ก็คือ เปลี่ยนจาก

MyObject myObj = (MyObject)u.unmarshal(new FileInputStream(“foo.xml”));

เป็นแบบนี้แทนครับ

MyObject myObj = (MyObject)((JAXBElement)u.unmarshal(new FileInputStream(“foo.xml”))).getValue();

หรือถ้าวิธีนี้ไม่ได้ผลก็ลองใช้

Object o = u.unmarshal(new FileInputStream(“foo.xml”));
System.out.println(o.getClass().getName);

เพื่อจะดูว่ามัน return object อะไรกลับมาครับ

ที่มาของวิธีแก้ปัญหาครับ : velocityreviews.com