1

私のプロジェクトでは、JaxBオブジェクトごとに xml ファイルを生成しました。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の 1 つを使用できます。unmarshal

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

詳細については

于 2012-08-22T10:54:45.483 に答える