Hallo,
ich baue mir zur Zeit eine Anwendung zusammen, die mit XML-Daten operiert. Dabei habe ich folgendes Grundgerüst:
Da das Marshalling bzw. Unmarshalling von Maps ja so nicht direkt geht, habe ich mir dazu eine Adapter-Klasse erstellt, die folgendermaßen aussieht:
Ich bin dabei nach diesem Beispiel vorgegangen.
Nach der XML-Erstellung erhalte ich jedoch folgende Datei:
Ziel des Adaptierens soll jedoch folgende XML-Struktur sein:
Die Klassen habe ich übrigens nur auf das notwendigste reduziert, damit es hier etwas übersichtlicher sein soll.
Wo liegt denn da jetzt mein Denkfehler?
Ich bedanke mich schon mal im Voraus bei Euch!
ich baue mir zur Zeit eine Anwendung zusammen, die mit XML-Daten operiert. Dabei habe ich folgendes Grundgerüst:
Java:
@XmlRootElement(name = "jobApplications")
@XmlAccessorType(XmlAccessType.NONE)
public class ApplicationList {
private Map<String, ApplicationItem> itemHashMap;
public ApplicationList() {
itemHashMap = new HashMap<String, ApplicationItem>();
}
public void setItemHashMap(Map<String, ApplicationItem> itemHashMap) {
this.itemHashMap = itemHashMap;
}
@XmlJavaTypeAdapter(CompanyListAdapter.class)
@XmlElement(name = "company")
public Map<String, ApplicationItem> getItemHashMap() {
return itemHashMap;
}
}
Java:
@XmlAccessorType(XmlAccessType.NONE)
public class ApplicationItem {
private String id;
public ApplicationItem() {
}
@XmlAttribute
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Java:
public class CompanyListAdapter extends
XmlAdapter<ArrayList<ApplicationItem>, Map<String, ApplicationItem>> {
@Override
public ArrayList<ApplicationItem> marshal(Map<String, ApplicationItem> value)
throws Exception {
ArrayList<ApplicationItem> itemList = new ArrayList<ApplicationItem>();
for(Map.Entry<String, ApplicationItem> e : value.entrySet())
itemList.add(e.getValue());
return itemList;
}
@Override
public Map<String, ApplicationItem> unmarshal(
ArrayList<ApplicationItem> value) throws Exception {
Map<String, ApplicationItem> map = new HashMap<String, ApplicationItem>();
for (ApplicationItem c : value)
map.put(c.getId(), c);
return map;
}
}
Nach der XML-Erstellung erhalte ich jedoch folgende Datei:
Code:
<jobApplications>
<company/>
</jobApplications>
Code:
<jobApplications>
<company id="0">
</company>
<company id="1">
</company>
usw.
</jobApplications>
Wo liegt denn da jetzt mein Denkfehler?
Ich bedanke mich schon mal im Voraus bei Euch!