2

私のメインクラスは

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

    Class[] classes = new Class[5];
    classes[0] = com.kk.AddressDetails.class;
    classes[1] = com.kk.COUNTRY.class;
    classes[2] = com.kk.ObjectFactory.class;
    classes[3] = com.kk.Details.class;
    classes[4] = com.kk.Districts.class;

    JAXBContext context = JAXBContext.newInstance(classes);

    Unmarshaller unmarshaller = context.createUnmarshaller();

    JAXBElement<COUNTRY> unmarshal = (JAXBElement<COUNTRY>) unmarshaller
            .unmarshal(new File("src\\countrydetails.xml"));
    COUNTRY value = unmarshal.getValue();
            System.out.println(value);

したがって、これをコンパイルしているときに、スレッド「メイン」でこの例外が発生しました。

4

3 に答える 3

3

COUNTRYクラスに注釈が付けられているため@XmlRootElement、ルート要素に一意に関連付けられていることを意味し、非整列化操作の結果は次のようになります。COUNTRY

COUNTRY c = (COUNTRY) unmarshaller.unmarshal(xml);

代わりCOUNTRYに 1 つ以上の対応する@XmlElementDecl注釈がある場合、またはパラメーターを受け取るunmarshalメソッドを使用しClassた場合、次のインスタンスを取得します。JAXBElement

JAXBElement<COUNTRY> c = unmarshaller.unmarshal(xml, COUNTRY.class);

詳細については

于 2013-06-27T09:19:05.013 に答える
2

これは、 and not をUnmarshaller.unmarshal(File f)返すためです。ObjectJAXBElement

署名は次のとおりです。

public Object unmarshal( java.io.File f ) throws JAXBException;

あなたの解決策は次のとおりです。

COUNTRY value = unmarshaller.unmarshal(new StreamSource(new File("src\\countrydetails.xml")), COUNTRY.class);
于 2013-06-27T07:05:42.157 に答える
0

非整列化の結果を JAXBElement にキャストする必要はありません。非整列化しようとしているのは単に COUNTRY クラスである必要があります。COUTNRY クラスに適切に注釈を付けたと仮定すると、次のように簡単に実行できます。

COUNTRY unmarshal = (COUNTRY) unmarshaller
            .unmarshal(new File("src\\countrydetails.xml"));

このチュートリアルに従って、簡単な例を通して JAXB のマーシャリングとアンマーシャリングについて学びます。

http://www.mkyong.com/java/jaxb-hello-world-example/

于 2013-06-27T07:06:26.623 に答える