2016-06-17 1 views
1

Lorsque vous utilisez le Moxy pour unmarshaling l'exemple XML à l'enfant, il ne peut toujours pas obtenir le nom. C'est toujours nul.Moxy ne peut pas masquer le champ de sous-classe qui se trouve à côté de supperclass

xml Exemple

<?xml version="1.0" encoding="UTF-8"?> 
<child> 
    <name value="test"/> 
</child> 

de classe Sample

public class Parent { 

    private String name; 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

@XmlRootElement 
public class Child extends Parent { 

    @Override 
    @XmlPath("name/@value") 
    public String getName() { 
     return super.getName() == null ? "" : super.getName(); 
    } 

    @Override 
    public void setName(String name) { 
     super.setName(name); 
    } 
} 


JAXBContext jc2 = JAXBContext.newInstance(Child.class); 
Unmarshaller unmarshaller = jc2.createUnmarshaller(); 
Child child = (Child) unmarshaller.unmarshal(new File("d:\\sample.xml")); 

Comment puis-je obtenir cette valeur, si je ne peux faire aucun changement sur la classe parente.

Merci,

Répondre

1

Après dig avec http://blog.bdoughan.com et stackoverflow.

OK, j'ai enfin trouvé ce sur stackoverflow

<?xml version="1.0"?> 
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" 
    version="2.6.0"> 
    <java-types> 
     <java-type name="com.abc.Parent" xml-transient="true" /> 
    </java-types> 
</xml-bindings> 

avec le code

Map<String, Source> metadata = new HashMap<String,Source>(); 
    metadata.put("com.abc", new StreamSource(Volume.class.getClassLoader().getResourceAsStream("sample.xml"))); 
    Map<String,Object> properties = new HashMap<String,Object>(); 
    properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadata); 
    JAXBContext jc2 = JAXBContext.newInstance(new Class[] {Child.class}, properties); 

pourrait alors obtenir/définir la valeur dans superclasse.

Si vous utilisez le maven cet article peut vous aider pour l'emplacement du fichier xmlbinding.

How do I solve EclipseLink's (MOXy) 'getting property "eclipselink.oxm.metadata-source" is not supported'?