2015-01-08 3 views
2

У меня есть следующий классMapping JSONObject свойство XML с Moxy

@XmlRootElement(name = "Root") 
class MyClass { 

    @XmlElement(name = "Entries") 
    JsonObject getProperty() { ... } 
} 

Я хотел бы иметь следующий вывод XML после сортировочных:

<Root> 
    <Entries> 
    <Entry> 
    <Name>Age</Name> 
    <Value>35</Value> 
    </Entry> 
    <Entry> 
    <Name>Email</Name> 
    <Value>[email protected]</Value> 
    </Entry> 
</Entries> 
</Root> 

при условии, что JSON вернулся из getProperty() является :

{ "Age": 35, "Email": "[email protected]" }

Я пытался создать вспомогательный класс XmlJsonEntry

@XmlAccessType(XmlAccessType.FIELD) 
@XmlRootElement(name = "Entry") 
class XmlJsonEntry { 
    @XmlElement 
    public String Name; 
    @XmlElement 
    public String Value; 
} 

и продлить XmlAdapter следующим образом:

public static class JsonXmlAdapter extends XmlAdapter<XmlJsonEntry[], JsonObject> 
{ 

    @Override 
    public XmlJsonEntry[] marshal(JsonObject v) throws Exception 
    { 
     List<XmlJsonEntry> entries = new ArrayList<XmlJsonEntry>(); 
     for (Entry<String,JsonElement> e : v.entrySet()) 
     { 
      entries.add(new XmlJsonEntry(e.getKey(),e.getValue().toString())); 
     } 
     return entries.toArray(new XmlJsonEntry[entries.size()]); 
    } 

    @Override 
    public JsonObject unmarshal(XmlJsonEntry[] v) throws Exception 
    { throw new Exception("Unmarshall not supported."); } 

} 

Но это бросает мне исключение во время кроссировки:

Попытка получить значение экземпляр переменной [name] типа [java.lang.String] из объекта [[Lmy.app. $ XmlJsonEntry;]. Указанный объект не является экземпляром класса или интерфейса, объявляющим базовое поле «

Как это получить? Может быть, есть более простой способ достичь этого?

ответ

2

Вместо:

public static class JsonXmlAdapter extends XmlAdapter<XmlJsonEntry[], JsonObject> 

Do:

public static class JsonXmlAdapter extends XmlAdapter<XmlJsonEntries, JsonObject> 

И тогда у XmlJsonEntries есть отображенный свойство, которое имеет тип List<XmlJsonEntry>.

+1

Это сработало! Спасибо! – NumberFour