マーシャリングされていないサンプルxmlファイル
<category>
<id>abcat0010000</id>
<name>Gift Center</name>
<path>
<category>
<id>cat00000</id>
<name>Best Buy</name>
</category>
<category>
<id>abcat0010000</id>
<name>Gift Center</name>
</category>
</path>
<subCategories>
<category>
<id>pcmcat140000050035</id>
<name>Capturing Photos & Videos</name>
</category>
<category>
<id>pcmcat140000050036</id>
<name>Listening to Digital Music</name>
</category>
<category>
<id>pcmcat140000050037</id>
<name>Computing Made Easy</name>
</category>
<category>
<id>pcmcat140000050039</id>
<name>Simple GPS Navigation</name>
</category>
<category>
<id>pcmcat140000050040</id>
<name>Playing Video Games</name>
</category>
<category>
<id>pcmcat140000050041</id>
<name>Watching HDTV</name>
</category>
<category>
<id>pcmcat140000050042</id>
<name>Enjoying Favorite Movies</name>
</category>
<category>
<id>abcat0012000</id>
<name>Him</name>
</category>
<category>
<id>abcat0013000</id>
<name>Teens</name>
</category>
<category>
<id>abcat0014000</id>
<name>Kids</name>
</category>
</subCategories>
</category>
私のJavaオブジェクト
@XmlRootElement(name="category")
public class Category {
String id;
String name;
public String getId() {
return id;
}
@XmlElement
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
}
両方のタイプの「カテゴリ」間の関係は少し混乱しています
@XmlRootElement("category")
public class ExtendedCategory extends Category {
/*String id;
String name;*/
List<Category> path;
List<Category> subCategories;
/*public String getId() {
return id;
}
@XmlElement
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
*/
public List<Category> getPath() {
return path;
}
@XmlElementWrapper(name="path")
@XmlElement(name="category", type=Category.class)
public void setPath(List<Category> path) {
this.path = path;
}
public List<Category> getSubCategories() {
return subCategories;
}
@XmlElementWrapper(name="subCategories")
@XmlElement(name="category", type=Category.class)
public void setSubCategories(List<Category> subCategories) {
this.subCategories = subCategories;
}
}
カテゴリをExtendedCategoryにキャストできないという例外が発生します。トップレベルのxml要素を別のものに変更すると正常に機能します(+拡張カテゴリの対応する変更)
複数の要素に対して同じ名前のオブジェクトをアンマーシャリングする方法は?