2014-03-25 2 views
2

개체에 대한 XML 응답을 구문 분석하려고하지만 예외가 발생합니다.XML 구문 분석에서 40 카운트의 IllegalAnnotationExceptions를 반환합니다.

응답의 링크 this입니다 :

<response> 
    <meta> 
    <per_page>10</per_page> 
    <total>20</total> 
    <geolocation>None</geolocation> 
    <took>8</took> 
    <page>1</page> 
    </meta> 
    <events> 
    <event> 
    ... 
    </event> 
    <event> 
    ... 
    </event> 
    .... 
    </events> 
</response> 

코드

 queryString = queryString.replaceAll(" ", "%20"); 
    try { 
     URL page = new URL(queryString); 

     HttpURLConnection conn = (HttpURLConnection) page.openConnection(); 
     conn.connect(); 
     InputStreamReader in = new InputStreamReader(conn.getInputStream(),Charset.forName("UTF-8")); 

     this.response = (Response) JAXB.unmarshal(in, Response.class); 
     } catch (Exception ex) { 
     ex.printStackTrace(); 
     return false; 
    } 

예외

javax.xml.bind.DataBindingException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 40 
counts of IllegalAnnotationExceptions 
Class has two properties of the same name "events" 
    this problem is related to the following location: 
.... 

객체 매핑으로 기본 JAXB 구현함으로써 클래스

@XmlRootElement(name = "Response") 
public class Response { 
    @XmlElement(name="per_page") 
    private int per_page; 
    @XmlElement(name="total") 
    private int total; 
    @XmlElement(name="geolocation") 
    private String geolocation; 
    @XmlElement(name="took") 
    private int took; 
    @XmlElement(name="page") 
    private int page; 
    @XmlElement(name="events") 
    private List<Event> events = null; 

    **getters and setters** 

객체

@XmlRootElement(name="event") 
public class Event { 
    @XmlElement(name = "links") 
    private String link; 
    @XmlElement(name = "id") 
    private int id; 
    @XmlElement(name = "stats") 
    private Stats stats; 
    @XmlElement(name = "title") 
    private String title; 
    @XmlElement(name = "announce_date") 
    private String announce_date; 
    @XmlElement(name = "score") 
    private float score; 
    @XmlElement(name = "date_tbd") 
    private boolean date_tbd; 
    @XmlElement(name = "type") 
    private String type; 
    @XmlElement(name = "datetime_local") 
    private String datetime_local; 
    @XmlElement(name = "visible_until_utc") 
    private String visible_util_utc; 
    @XmlElement(name = "time_tbd") 
    private boolean time_tbd; 
    @XmlElement(name = "taxonomies") 
    private List<Taxonomie> taxonomies; 
    @XmlElement(name = "performers") 
    private List<Performer> performers; 
    @XmlElement(name = "url") 
    private String url; 
    @XmlElement(name = "created_at") 
    private String created_at; 
    @XmlElement(name = "venue") 
    private Venue venue; 
    @XmlElement(name = "short_title") 
    private String short_title; 
    @XmlElement(name = "datetime_utc") 
    private String datetime_utc; 
    @XmlElement(name = "datetime_tbd") 
    private boolean datetime_tbd; 

    **getters and setters** 

답변

1

공공 필드와 속성을 취급합니다. 비공개 필드에 주석을 달면 매핑됩니다. 매핑 된 필드에 동일한 이름의 속성이 있으면이 예외가 발생합니다.

필드에 주석을 달 때 클래스에 주석을 달아야합니다. @XmlAccessorType(XmlAccessType.FIELD). http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html


참고 :

은 당신은 당신이 필요 이상 모델에 대한 자세한 주석을 추가하고 있습니다. JAXB는 예외에 의한 구성이므로 XML 표현을 기본값과 다른 위치에 주석을 추가하기 만하면됩니다.

관련 문제