Java クラスから必要な XML を期待どおりに生成できません。
これはzooのプロパティを定義するクラスです
**//Modal Class**
public class Zoo
{
private String name;
private String place;
//Getters Setters
}
XML にする動物園クラスのリストを持つアクション クラス
//zoo クラスの複数のオブジェクトを持つ Action クラス
@ManagedBean
@XmlRootElement
public @SessionScoped class zoos implements Serializable {
private String name;
private String place;
private static final ArrayList<Zoo> zoo_list
= new ArrayList<Zoo>();
@XmlElement
public ArrayList<Zoo> getZoo_list()
{
return zoo_list;
}
public void xmleg()
{
File file = new File("C:\\file.xml");
for(Zoo add: zoo_list)
{
try
{
JAXBContext jaxbContext = JAXBContext.newInstance(Zoos.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(new JAXBElement<Zoo>(new QName("","Zoo"),zoo.class,add),file);
jaxbMarshaller.marshal(new JAXBElement<Zoo>(new QName("","Zoo"),zoo.class,add),System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
生成される出力は次のとおりです。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<zoo>
<linkId>0</linkId>
<name>gfdsgdgtretr</name>
<place>gdfg</place>
</zoo>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<zoo>
<linkId>0</linkId>
<name>gfdsgdgtretr</name>
<place>gdfg</place>
</zoo>
ただし、期待される出力は次のようになります。
<zoos>
<zoo>
<linkId>0</linkId>
<name>gfdsgdgtretr</name>
<place>gdfg</place>
</zoo>
<zoo>
<linkId>0</linkId>
<name>gfdsgdgtretr</name>
<place>gdfg</place>
</zoo>
</zoos>
@XMLElementWrapper アノテーションも試してみましたが、うまくいきません。多くのチュートリアルを経験しましたが、解決策が見つかりませんでした。