J'utilise Retrofit 2 avec un SimpleXmlConverter
et je suis confronté à un problème lors de la création d'un objet de demande de savon, qui est essentiellement un élément avec 4 éléments enfants chacun étant différents types de données.L'annotation @Order n'a aucun effet sur l'ordre de sérialisation XML
Voici la sortie XML
que je veux produire. L'ordre d'élément doit être respecté:
<prf:container>
<prf:aaa>111111111</prf:aaa>
<prf:bbb>true</prf:bbb>
<prf:element>
<prf:ddd>50</prf:ddd>
<prf:eee>false</prf:eee>
</prf:element>
<prf:ccc>textcontent</prf:ccc>
</prf:container>
Maintenant, voici ma classe Android, Container.java
, représentant le savon Demande objet qui sera publié en feuilleton:
@Root (name = "prf:container")
@Order(elements={"prf:aaa", "prf:bbb", "prf:element", "prf:ccc"})
public class Container {
@Element (name = "prf:aaa")
private int aaa;
@Element(name = "prf:bbb")
private boolean bbb;
@Element (name = "prf:element", required = false)
private MyElement myElement;
@Element (name = "prf:ccc", required = false)
private String ccc;
}
Selon la documentation du cadre XML simple:
Par défaut, la sérialisation des champs est effectuée dans l'ordre de déclaration.
Cependant, dans Android, ce n'est pas vrai, au moins dans certains cas. Peu importe comment je définis l'ordre de déclaration de champ dans ma classe Container
, la sortie a toujours le même ordre d'éléments. Ceci est un bug connu et comme cela a été rapporté dans d'autres publications SO.
Néanmoins, il existe une solution à ce problème. L'annotation Order
. En savoir plus in the Javadoc.
Mon problème est que l'utilisation de l'annotation Order
dans mon cas n'aide pas. Notez que tous mes éléments ont un préfixe sur son nom - prf:
.
Si je supprime le préfixe prf
de tous mes noms d'éléments, l'annotation Order
fonctionnera correctement et forcera la sérialisation XML à avoir l'ordre défini. Mais les éléments de sortie n'auront pas le préfixe sur son nom.
Mais j'ai vraiment besoin de mes éléments pour avoir le préfixe sur son nom, sinon ma requête aura une réponse 500. Je dois aussi avoir l'ordre d'élément désiré dans ma sortie XML.
Une solution à cela?
Merci
Salut, j'ai essayé votre solution ci-dessus. Cela fonctionne bien sur les appareils avec une version Android supérieure ou égale à 5.0, mais sur les appareils ci-dessous, la commande n'est pas conservée. Pouvez-vous suggérer une solution à ce problème? –