1

在我的项目中,我按JaxB对象生成了 xml 文件。现在我想再次将 unmarshall 作为JAXB对象。当我试图解组时,它会抛出 classcastException。

请找到我写的课程:

public class ReservationTest1 {

    public static void main(String []args) throws IOException, JAXBException
    {

        JAXBContext jaxbContext = JAXBContext.newInstance(com.hyatt.Jaxb.makeReservation.request.OTAHotelResRQ.class);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        @SuppressWarnings("unchecked")
        JAXBElement bookingElement = (JAXBElement) unmarshaller.unmarshal(
                 new FileInputStream("D://myproject//Reservation.xml"));


        System.out.println(bookingElement.getValue());

    }
}

您能否提供有用的信息来解决它。

4

1 回答 1

1

为什么你会得到一个 ClassCastException

如果要解组的对象带有注释,@XmlRootElement那么您将获得该类的实例而不是JAXBElement.

FileInputStream xml = new FileInputStream("D://myproject//Reservation.xml");
OTAHotelResRQ booking = (OTAHotelResRQ) unmarshaller.unmarshaller.unmarshal(xml);

始终获取域对象

如果您总是希望接收域对象的实例,无论是域对象还是JAXBElement从解组操作返回,您都可以使用JAXBIntrospector.

FileInputStream xml = new FileInputStream("D://myproject//Reservation.xml");
Object result = unmarshaller.unmarshaller.unmarshal(xml);
OTAHotelResRQ booking = (OTAHotelResRQ) JAXBIntrospector.getValue(result);

始终获取 JAXBElement

如果您希望始终收到您的实例,JAXBElement可以使用unmarshal采用类参数的方法之一。

StreamSource xml = new StreamSource("D://myproject//Reservation.xml");
JAXBElement<OTAHotelResRQ> bookingElement = 
    unmarshaller.unmarshal(xml, OTAHotelResRQ.class);

了解更多信息

于 2012-08-22T10:54:45.483 回答