2016-05-20 1 views
0

je le code XML suivant:Impossible d'analyser la propriété xml vide avec l'attribut

<prog> 
    <prop1 attr="attr"> </prop1> 
    <prop2>some</prop2> 
</prog> 

je la classe suivante pour le représenter:

@JsonIgnoreProperties(ignoreUnknown = true) 
@JacksonXmlRootElement(localName = "prog") 
public class Prog { 

    @JacksonXmlProperty(localName = "prop1") 
    private String prop1; 

    @JacksonXmlProperty(localName = "prop2") 
    private String prop2; 

    //getters, setters 
} 

Mais il échoue avec l'erreur suivante: Could not read document: Can not instantiate value of type [simple type, class com.xxx.xxx.entities.ro.Prog] from String value ('some'); no single-String constructor/factory method\n at [Source: [email protected]; line: 18, column: 36]

Les xmls suivants peuvent être bien analysées (en utilisant la classe ci-dessus):

sans attribut

<prog> 
    <prop1> </prop1> 
    <prop2>some</prop2> 
</prog> 

prop1 vide (au lieu des espaces)

<prog> 
    <prop1 attr="attr"></prop1> 
    <prop2>some</prop2> 
</prog> 

pas vide prop1

<prog> 
    <prop1 attr="attr"> g</prop1> 
    <prop2>some</prop2> 
</prog> 

Est-ce que XML d'origine valide? Et comment puis-je l'analyser?
En fait, je besoin de sauter attr, mais j'ai essayé aussi de le représenter comme objet:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class XmlElement { 

    @JacksonXmlText 
    private String value; 

    //getters, setters 
} 

MISE À JOUR: J'invoquons l'analyse tout en utilisant les contrôleurs SpringMVC, mais il reproduit aussi avec:

String xml = "<prog>" + 
     "<prop1 attr=\"att1\"> </prop1>" + 
     "<prop2>some</prop2>" + 
     "</prog>"; 
ObjectMapper xmlmapper = new XmlMapper(); 
Prog prog = xmlmapper.readValue(xml, Prog.class); 
+0

Afficher aussi le code comment appelez-vous analyseur. – Andremoniy

+0

@Andremoniy J'ai mis à jour ma question –

Répondre

2

Cela fonctionne parfaitement avec com.fasterxml.jackson de la version 2.7.4. Mais il échoue avec diverses erreurs si certaines bibliothèques ont une autre version (par exemple, jackson-dataformat-xml des versions antérieures). Donc, vous devez vérifier quelles versions de com.fasterxml.jackson.core, jackson-annotations et jackson-dataformat-xml sont utilisées, et les rendre identiques.

+0

Je change la version en 2.7.4 et elle commence à fonctionner (auparavant j'utilise 2.7.3 partout). Donc c'était juste un bug dans les versions précédentes? –

+0

oh, oui, voici mon bug: https://github.com/FasterXML/jackson-dataformat-xml/issues/191 –