2013-05-27 2 views
1

Мой класс помечается, какTrouble десериализации XML с помощью SimpleXML

@Root 
public class Geonames { 
    @Path("intersection/street1") 
    @Element 
    public String street1; 

    @Path("intersection/highway1") 
    @Element 
    public String highway1; 

    @Path("intersection/street2") 
    @Element 
    public String street2; 

    @Path("intersection/highway2") 
    @Element 
    public String highway2; 

    @Path("intersection/lat") 
    @Element 
    public String lat; 

    @Path("intersection/lng") 
    @Element 
    public String lng; 

    @Path("intersection/distance") 
    @Element 
    public String distance; 
} 

XML-как таковой:

<geonames> 
    <intersection> 
     <street1>11th Street</street1> 
     <highway1>residential</highway1> 
     <street2>Campbell Street</street2> 
     <highway2>unclassified</highway2> 
     <lat>37.8098123</lat> 
     <lng>-122.2969874</lng> 
     <distance>0.07</distance> 
    </intersection> 
</geonames> 

Но я получаю ошибку:

05-26 23:46:46.511: E//RequestProcessor.java:250(23618): Caused by: 
org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy 
@org.simpleframework.xml.Element(data=false, name=, required=true, type=void) on field 
'street1' public java.lang.String com.mosier.securityapp.geonames.Geonames.street1 for 
class com.mosier.securityapp.geonames.Geonames at line 4 

Это показывает, что улица1 не имеет значения, но, конечно, это так. Моя аннотация или класс должны быть настроены неправильно, но я слишком новичок в этом, чтобы понять, что происходит. Есть ли легкое решение, которое я пропускаю?

+0

точки --Когда реализации сериализации/де-сериализации сценарий я всегда делаю сериализации первым, чтобы исключить неверную XML, и --Если вы имеете ошибку на первом элементе так ли вероятно, у вас есть фундаментальная проблема со всем этим. - вам нужен geonames/intersection/.. а не просто пересечение/.. в вашем @Path –

+0

Я считаю, что я тоже пробовал, получил разные ошибки. Я смог решить это, сделав это как вложенные объекты, а не используя более сложные @Paths. Хорошая точка в сериализации. Я рассмотрю ваше решение. – deepwinter

ответ

1

Попробуйте

@Root 
public class Geonames { 
    @Path("intersection") 
    @Element 
    public String street1; 

    @Path("intersection") 
    @Element 
    public String highway1; 

    @Path("intersection") 
    @Element 
    public String street2; 

    @Path("intersection") 
    @Element 
    public String highway2; 

    @Path("intersection") 
    @Element 
    public String lat; 

    @Path("intersection") 
    @Element 
    public String lng; 

    @Path("intersection") 
    @Element 
    public String distance; 
} 
+0

о, действительно. Таким образом, аннотация @Path указывает путь к элементу, минус сам элемент. Наверное, это то, чего мне не хватало. – deepwinter

Смежные вопросы