2014-02-20 4 views
2

Я пытаюсь прочитать конфигурационный файл на Android с помощью Retrofit и SimpleXML.Android SimpleXML Parsing кажется ограниченным в Depth

У меня установлены мои зависимости и действительная схема XML. Простой XML начинает разбирать мой документ, но, когда он достигает определенный тег/глубину он терпит неудачу с ошибкой ниже

Caused by: retrofit.converter.ConversionException: org.simpleframework.xml.core.ElementException: Element 'Host' does not have a match in class 
Caused by: org.simpleframework.xml.core.ElementException: Element 'Host' does not have a match in class 

части моего XML выглядит следующим образом:

<Config> 
    ... 
    <Identity> 
     <Address> 
      <Host>...</Host> 
      ... 
     </Address> 
     ... 
    </Identity> 
    ... 
</Config> 

Он не разбирает весь вплоть до него достигает тега Host, который является первым элементом, глубоко вложенным в него. Указанная ошибка обычно указывает на отсутствующую аннотацию, но в этом случае она аннотируется, как и должно быть. Мой отображенный объект выглядит следующим образом:

@Root(name="Config") 
public class Config { 

    @ElementList(entry="Identity", inline=true) 
    private List<Identity> mIdentities; 

    @Root(name="Identity") 
    static class Identity { 

     @Element(name="Address") 
     private Address mAddress; 

     ... 

    } 

    @Root(name="Address") 
    static class Address { 

     @Element(name="Host") 
     private String mHost; 

     ... 
    } 
} 

Есть ли кто-то, кто испытал подобную проблему и имеет представление о том, что проблема может быть? Или SimpleXML ограничен глубиной, которую он может достичь? Может быть, это проблема, связанная с ListElement? Я не могу найти документацию, в которой упоминаются какие-либо проблемы.

ответ

0

Это исключение означает отсутствующую аннотацию или неправильное отображение между классом и XML. Возможно гнездование не правильно, неправильно аннотации используются и т.д.

Трудно сказать, Что причина здесь, но поставить убедитесь, что ваш код выглядит примерно так: (! Псевдокод не testet)

@Root(name = "Address") 
public class Address 
{ 
    @Element(name="Host") 
    private String mHost; 

    // more things here ... 
} 

Можете ли вы проверить вашу проблему на минимальной или показать, по крайней мере, как адрес реализуется? Btw. всегда полезно попробовать в противоположном направлении: Возьмите объект Config, сериализуйте его и проверьте, построена ли она так, как вам нужно.

+0

Да, все было аннотировано правильно, я дважды проверил и попробовал подклассы как с Элементом, так и с Корнем. Нет ли ограничений по глубине? –

+0

Btw Я обновил свой вопрос с помощью класса сопоставления –

+0

Проверите сериализацию объекта 'Config' (если это возможно), соответствует ли ваш вход или есть ошибки? – ollo