2

次のようなXMLがあります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ObjectList>
  <object attributeOne="somedate" attributeTwo="false" attributeThree="id" attributeFour="true"/>
  <object attributeOne="somedate" attributeTwo="false" attributeThree="id" attributeFour="true"/>
  <object attributeOne="somedate" attributeTwo="false" attributeThree="id" attributeFour="true"/>
  <object attributeOne="somedate" attributeTwo="false" attributeThree="id" attributeFour="true"/>
  <object attributeOne="somedate" attributeTwo="false" attributeThree="id" attributeFour="true"/>
</ObjectList>

次のようなObjectListクラスがあります。

@XmlRootElement
public class ObjectList {

    @XmlElementWrapper(name = "ObjectList")
    @XmlElement(name = "Object")
    private ArrayList<Object> ObjectList;

    public ArrayList<Object> getObjectList() {
        return ObjectList;
    }

    public void setObjectList(ArrayList<Object> objectList) {
        ObjectList = objectList;
    }
}

そして、次のようなオブジェクトクラス:

@XmlRootElement(name = "Object")
public class Object {

    Date attributeOne;
    boolean attritbuteTwo;
    String attributeThree;
    boolean attributeFour;

    @XmlAttribute
    public Date getAttributeOne() {
        return attributeOne;
    }
    public void setAttributeOne(Date attributeOne) {
        this.attributeOne = attributeOne;
    }

    @XmlAttribute
    public boolean isAttributeTwo() {
        return attritbuteTwo;
    }
    public void setAttributeTwo(boolean attritbuteTwo) {
        this.AttributeTwo = AttributeTwo;
    }

    @XmlAttribute
    public String getAttributeThree() {
        return attributeThree;
    }
    public void setAttributeThree(String attributeThree) {
        this.attributeThree = attributeThree;
    }

    @XmlAttribute
    public boolean isAttributeFour() {
        return attributeFour;
    }
    public void setAttributeFour(boolean attributeFour) {
        this.attributeFour = attributeFour;
    }
}

このコードを使用してxmlをアンマーシャリングしてオブジェクトにしようとすると、次のようになります。

JAXBContext jaxbContext = JAXBContext.newInstance(ObjectList.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

RESTResponse response = getObjects();

ObjectList objects = (ObjectList) unmarshaller.unmarshal(new StringReader(response.getResponseBody()));

次のエラーが発生します。

javax.xml.bind.UnmarshalException:予期しない要素(uri: ""、local: "ObjectList")。必要な要素は<{}Object>、<{}objectList>です。

編集: ObjectListオブジェクトのXmlRootElementタグを@XmlRootElement(name = "ObjectList")に変更し、オブジェクトのXmlRootElementタグを@XmlRootElement(name = "object)に変更したいくつかの問題に気づきました。例外は発生しなくなりました。 、しかし、私は今、オブジェクトのリストを取得して空にします。

どんな助けでも大歓迎です。

4

2 に答える 2

3

さて、それは期待される要素を言います:ObjectまたはobjectList(小文字の「o」で始まる)しかしそれはObjectList(大文字の「O」で始まる)を読みます!

于 2012-05-07T16:04:25.590 に答える
0

カスタムクラスの名前をObject別の名前に変更してみてください。または、の正しいインスタンスがクラスObjectで使用されていることを確認してくださいObjectList

于 2012-05-07T15:48:33.663 に答える