J'utilise actuellement un morceau de XML comme le texte suivant
<Person> <Name>Frank Smith</Name> <Id>100023412</Id> <DOB>12/05/1954</DOB> <LasLogin>01/09/2010</LasLogin> <FavOS>Windows</FavOS> // Wild card that may occasionally appear </Person>
6 Réponses :
du FAQ sur X-Stream : P>
Comment Xstream traite-t-il de plus récent versions des classes? p>
- Si un nouveau champ est ajouté à la classe, désérialiser une ancienne version laissera le champ ininitialisé. li>
- Si un champ est retiré de la classe, désérialiser une ancienne version contenant le champ entraînera une exception. Laissant le champ en place mais la déclarant comme transitoire évitera l'exception, mais Xtream n'essaiera pas de le désérialiser. Li>
- ... li>
implémente une mappeuse personnalisée pour ignorer les champs inconnus automatiquement (voir l'acceptation Test Custommappertest.TestCanBeuseDooomitUnexpedelements ()) strong> li> ul> blockQuote>
Bravo, j'ai eu une chasse et semble être un problème depuis 2004.
Comme il m'a fallu plus de 15 minutes pour trouver cette réponse, je pensais poster cela. Ceci semble sauter des éléments XML qui ne sont pas dans vos objets. P > p>
Cela fonctionne-t-il si vous ne connaissez pas le nom du champ que vous voulez ignorer
Tout d'abord, merci d'avoir partagé cette réponse. C'était très utile. Cependant, le code mentionné ci-dessus a des problèmes. Il n'a pas de @Override annotations, qui sont un must à utiliser ce morceau de code. Voici le code mis à jour qui fonctionne:
XStream xstream = new XStream(new StaxDriver()) { @Override protected MapperWrapper wrapMapper(MapperWrapper next) { return new MapperWrapper(next) { @Override public boolean shouldSerializeMember(Class definedIn, String fieldName) { if (definedIn == Object.class) { return false; } return super.shouldSerializeMember(definedIn, fieldName); } }; } };
xstream 1.4.5 prend en charge les étiquettes qui ne sont pas implémentées. Utilisez Ignoreunknownelements pour les balises qui ne sont pas encore implémentés ou ont été supprimés et vous traitez avec Old XML. Vous pouvez également spécifier quelle balise particulière que vous souhaitez ignorer. p>
Depuis Xstream 1.4.5 Durring During Marshaller Déclaration Il suffit d'utiliser Ignoréennonnemens () Méthode: Pour ignorer les éléments inutiles. P> P>
J'ai demandé exactement le même problème.
Comment faire un xstreammarshaller ignorer une liaison inconnue? p>
et j'ai reçu un commentaire reliant ce message. p>
J'ai résolu le mon problème en étendant le xstreammarshaller code>. p>