0

When i try to retrieve a xml with rest Template and SimpleXmlHttpMessageConverter i have this error, i don't know why

04-09 12:02:00.920: W/System.err(16431): org.springframework.http.converter.HttpMessageNotReadableException: Could not read [class com.intescia.library.donnee.dto.wsresponse.MenuDto]; nested exception is org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT @1:2 in java.io.InputStreamReader@21244c40)

here is my code:

private  RestTemplate getRestTemplateInstance() {
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
    restTemplate.getMessageConverters().add(new SimpleXmlHttpMessageConverter());
    return restTemplate;
}


private HttpHeaders getHeader(Context context) {
    HttpHeaders requestHeaders = new HttpHeaders();
    requestHeaders.setAccept(Collections.singletonList(MediaType.ALL));
    requestHeaders.setAcceptEncoding(ContentCodingType.ALL);
    return requestHeaders;
}





@Override
 public MenuDto RecupererMenu(Context context,String url) {

    HttpHeaders requestHeaders = getHeader(context);
    RestTemplate restTemplate = getRestTemplateInstance();
    try {

        ResponseEntity<MenuDto> responses = restTemplate.exchange(url, HttpMethod.GET,  new HttpEntity<String>(requestHeaders),MenuDto.class);
        if(statusIsNotModified(responses.getStatusCode()))
            return null;
        MenuDto menu= responses.getBody();
    return menu;
} catch (Exception e) {
    e.printStackTrace();
    Log.i(TAG+" message="+e.getMessage(), "PROBLEM CONNEXION OU MAUVAISE URL? ERROR PAS DE REPONSE A PARTIR DE L URL= "+url);
    return null;
}

}

When i try with String it's work correctly

 public MenuDto RecupererMenu(Context context,String url) {

    HttpHeaders requestHeaders = getHeader(context);
    RestTemplate restTemplate = getRestTemplateInstance();
    String responseString="";
    try {
        ResponseEntity<String> responses = restTemplate.exchange(url, HttpMethod.GET,  new HttpEntity<String>(requestHeaders),String.class);
        responseString= responses.getBody();
        Serializer serializer = new Persister();
        MenuDto menu = serializer.read(MenuDto.class, responseString);
    return menu;
} catch (Exception e) {
    e.printStackTrace();
    Log.i(TAG+" message="+e.getMessage(), "PROBLEM CONNEXION OU MAUVAISE URL? ERROR PAS DE REPONSE A PARTIR DE L URL= "+url);
    return null;
}

}

The file xml is like that:

<menu>
<menu_item gabarit="a_la_une">
<label>A la Une</label>
<url>
http://coiffuredeparis-recette.intescia.com/applis/a_la_une.aspx
</url>
</menu_item>
<menu_item gabarit="groupe">
<label>Profession coiffeur</label>
<menu>
<menu_item gabarit="rubrique">
<label>Marché</label>
<id>25</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/marche
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Organisation et management</label>
<id>30</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Organisation-et-management
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Stratégies d'entreprise</label>
<id>31</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Strategies-dentreprise
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Equipement et design</label>
<id>32</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Equipement-et-design
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Bien être</label>
<id>33</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Bien-etre
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Ecoles</label>
<id>572</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Ecoles/
</url>
</menu_item>
</menu>
</menu_item>
<menu_item gabarit="groupe">
<label>Style et Savoir faire</label>
<menu>
<menu_item gabarit="rubrique">
<label>L'invité du mois</label>
<id>44</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Linvite-du-mois/
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Tendances</label>
<id>41</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Tendances/
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Savoir-faire</label>
<id>42</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Savoir-faire/
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Le point sur...</label>
<id>43</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Le-point-sur/
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Fiches techniques</label>
<id>29</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Fiches-techniques/
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Formations artistiques</label>
<id>45</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Formations-artistiques/
</url>
</menu_item>
</menu>
</menu_item>
<menu_item gabarit="groupe">
<label>La rédac a repéré</label>
<menu>
<menu_item gabarit="rubrique">
<label>Salons insolites</label>
<id>46</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Salons-insolites/
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Shopping produits</label>
<id>47</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Shopping-produits/
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Banc d'essai</label>
<id>48</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Banc-dessai/
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Accessoires</label>
<id>49</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Accessoires/
</url>
</menu_item>
</menu>
</menu_item>
<menu_item gabarit="groupe">
<label>Culture Coiffure</label>
<menu>
<menu_item gabarit="rubrique">
<label>Les irrésistibles</label>
<id>50</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Les-irresistibles/
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Le saviez-vous ?</label>
<id>51</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Le-saviez-vous/
</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Couturiers du cheveu</label>
<id>52</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Couturiers-du-cheveu/
</url>
</menu_item>
</menu>
</menu_item>
<menu_item gabarit="groupe">
<label>Evènements</label>
<menu>
<menu_item gabarit="rubrique">
<label>Vidéos</label>
<url>
http://www.coiffuredeparis.fr/applis/rubrique_videos.xml
</url>
</menu_item>
</menu>
</menu_item>
<menu_item gabarit="groupe">
<label>Services</label>
<menu>
<menu_item gabarit="rubrique" ref="agenda">
>
<label>Agenda</label>
<id>229</id>
<url>
http://coiffuredeparis-recette.intescia.com/applis/Agenda/
</url>
</menu_item>
<menu_item gabarit="emplois">
<label>Offres d'emploi</label>
<url>http://www.coiffuredeparis.fr/applis/emploi.aspx</url>
</menu_item>
<menu_item gabarit="rubrique">
<label>Fond de Commerce et Vente de matériel</label>
<url>
http://www.coiffuredeparis.fr/applis/fond_de_commerce.aspx
</url>
</menu_item>
<menu_item gabarit="webview">
<label>Prochain Business Trophy</label>
<url>
http://www.coiffuredeparis.fr/Evenements/Business-Trophy/2014/2/Business-Trophy-2014/
</url>
</menu_item>
<menu_item gabarit="webview">
<label>Dernier Business Trophy</label>
<url>
http://www.coiffuredeparis.fr/Evenements/Business-Trophy/2014/3/Retour-sur-les-laureats-2013-2019615W/
</url>
</menu_item>
</menu>
</menu_item>
<menu_item gabarit="groupe">
<label>MON COMPTE</label>
<menu>
<menu_item gabarit="compte">
<label>Se déconnecter</label>
</menu_item>
<menu_item gabarit="abonnement">
<label>Mon abonnement</label>
</menu_item>
<menu_item gabarit="favoris">
<label>Mes Favoris</label>
</menu_item>
</menu>
</menu_item>
<menu_item gabarit="parametres">
<label>Paramètres</label>
</menu_item>
<menu_item gabarit="avis">
<label>Donner un avis sur l'application</label>
</menu_item>
<menu_item gabarit="autopromo">
<label>Autopromo</label>
</menu_item>
</menu>

Class MenuDto.java is:

     @Root(name="menu",strict=false)
public class MenuDto {

    public List<MenuItemDto> getListMenuItem() {
        return listMenuItem;
    }

    public void setListMenuItem(List<MenuItemDto> listMenuItem) {
        this.listMenuItem = listMenuItem;
    }

    public MenuDto(){
        super();
    }

    @ElementList(entry="menu_item",inline=true)
    private List <MenuItemDto> listMenuItem ;

}

MenuItemDto.java:

             @Root(name="menu_item",strict=false)

public class MenuItemDto {

public String getGabarit() {
    return gabarit;
}
public void setGabarit(String gabarit) {
    this.gabarit = gabarit;
}
public String getLabel() {
    return label;
}
public void setLabel(String label) {
    this.label = label;
}
public String getUrl() {
    return url;
}
public void setUrl(String url) {
    this.url = url;
}
public MenuDto getMenu() {
    return menu;
}
public void setMenu(MenuDto menu) {
    this.menu = menu;
}
public MenuItemDto(){
    super();
}

@Attribute
private String gabarit;

@Element
private String label;

@Element(required=false)
private String url;

@Element(required=false)
private String smartAdPageId;

public String getSmartAdPageId() {
    return smartAdPageId;
}
public void setSmartAdPageId(String smartAdPageId) {
    this.smartAdPageId = smartAdPageId;
}

public MenuItemDto(String label) {
    super();
    this.label = label;
}

@Element(name="id",required=false)
private String Rubriqueid;

@Element(required=false)
private MenuDto menu;
public String getRubriqueid() {
    return Rubriqueid;
}
public void setRubriqueid(String rubriqueid) {
    Rubriqueid = rubriqueid;
}

}

Thank's for your responses

tamtoum1987
  • 1,957
  • 3
  • 27
  • 56

1 Answers1

0

Had the same problem:

Solved this with:

See this link : Reading UTF-8 - BOM marker

//InputStreamReader isr = new InputStreamReader(body.in(), charset); InputStreamReader isr = new InputStreamReader(new BOMInputStream(body.in(), false, ByteOrderMark.UTF_8));

Overriden in the class SimpleXmlConverter (Retrofit and SimpleXMLConverter)

Community
  • 1
  • 1
kaasdude
  • 1,336
  • 2
  • 8
  • 13