1

私は Jaxb を使用して、xml をアンマーシャリングしています。Java 1.6 を使用しています。これは、JWSDP 2.0 によって生成されるクラスです。(xjc.bat)しかし、私の問題は、生成されたクラスをコンパイルできないことです。以下に示すように、構文エラーが発生します。

「型の不一致: XmlAccessType から AccessType に変換できません」

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;


@XmlAccessorType(XmlAccessType.FIELD)// here i am getting sytax error
@XmlType(name = "personinfo", propOrder = {
    "firstname",
    "lastname",
    "address"
})
public class Personinfo {

    @XmlElement(required = true)
    protected String firstname;
    @XmlElement(required = true)
    protected String lastname;
    @XmlElement(name = "Address", required = true)
    protected PersonAddress address;
............................

この点で誰も助けることができますか、

4

1 に答える 1

4

以下のデモコードを使用して質問のクラスを試してみましたがPersoninfo、すべて正常に機能しました。Java SE 6 (JAXB 実装を含む) を使用しているため、クラスパスに JWSDP 2.0 の JAXB API がないことを確認する必要があります。

JWSDP はかなり古いため、JWSDP の代わりに Java SE 6 の XJC ユーティリティを使用することもお勧めします。

デモ

package forum10514244;

import java.io.File;
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Personinfo.class);

        File xml = new File("src/forum10514244/input.xml");
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        JAXBElement<Personinfo> je = unmarshaller.unmarshal(new StreamSource(xml), Personinfo.class);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(je, System.out);
    }

}

input.xml/出力

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <firstname>Jane</firstname>
    <lastname>Doe</lastname>
    <Address/>
</root>
于 2012-05-09T10:54:26.063 に答える