2017-06-02 17 views
0

私は何の問題もなく、次のようなオブジェクトを解析されました:JAXBを使用してJavaでネストされたXMLオブジェクトのリストを解析するにはどうすればよいですか?

<response> 
    <myObject> 
     <id>1</id> 
     <name>abc</name> 
    </myObject> 

    <myObject> 
     <id>2</id> 
     <name>def</name> 
    </myObject> 
</response> 

このようなクラスで:これは私のAPI呼び出しで、正常に動作します

@XmlRootElement(name="myObject") 
public class MyObject{ 

    @XmlElement(name="id") 
    long id; 

    @XmlElement(name="name") 
    String name; 

    /* getters and setters ... etc.. */ 

} 

私はMyObjectsのリストなどを取得します期待される。 しかし、どのように私はこのタイプの応答扱うん:その後、私はあまりにも@XmlElementWrapperを使用して考えた

@XmlRootElement(name="objectWrapper") 
public class ObjectWrapper{ 

    @XmlElement(name="myObject") 
    List<MyObject> myObject; 
    /* getters and setters ... etc.. */ 

} 

、しかし:最初に

<response> 
    <objectWrapper> 
     <myObject> 
      <id>1</id> 
      <name>abc</name> 
     </myObject> 

     <myObject> 
      <id>2</id> 
      <name>def</name> 
     </myObject> 
    </objectWrapper> 
</response> 

を私はObjectWrapperクラスを構築すると、このように、トリックを行うだろうと思いましたどうやって? クラスの@XmlRootElementとリストの@XmlElementWrapperを削除できますか?

編集:

@XmlRootElement(name="response") 
public class Response { 

    @XmlElementWrapper(name="objectWrapper") 
    @XmlElement(name="myObject") 
    List<MyObject> myObject; 
    /* getters and setters ... etc.. */ 

} 

あなたはObjectWrapperクラスを必要としない:いいえ、私はあなたが単にこのようにそれを書くことができ@XmlRootElement

+0

'ObjectWrapper'仕事ではなく、あなたのソリューションをしていますか? 'ObjectWrapper'と' MyObject'の両方に '@XmlRootElement'を持つことは問題ありません。 – Berger

答えて

1

あなたのクラスの名前がObjectWrapperであるかどうかは関係ありません。 @XmlElementWrapperに正しいラッパー名(objectWrapper)を指定する必要があります。

あなたObjectWrapperクラスには、次のようになります。

@XmlRootElement(name = "response") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class ObjectWrapper 
{ 
    @XmlElementWrapper(name = "objectWrapper") 
    @XmlElement(name = "myObject") 
    private List<MyObject> myObjects; 


    public void setMyObjects(List<MyObject> objects) 
    { 
     this.myObjects = objects; 
    } 

    public List<MyObject> getMyObjects() 
    { 
     return myObjects; 

    } 
} 
1

を削除することはできません。

関連する問題