2016-06-17 1 views
1

Moxy를 사용하여 샘플 xml을 자식으로 마샬링하는 경우 항상 이름을 가져올 수 없습니다. 항상 null입니다.Moxy can not unmarshal subclass 필드를 상속 한 자식 클래스

샘플 XML

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

샘플 클래스 나 상위 클래스의 변경을 할 수없는 경우 나,이 값을 얻을 수있는 방법

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")); 

.

감사합니다, http://blog.bdoughan.com 및 유래와 발굴 후

답변

1

.

OK, 나는 마침내 그런 다음/슈퍼 클래스의 값을 설정받을 수있는 코드

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); 

으로 유래

<?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> 

에이를 발견했다.

당신이 maven을 사용한다면이 기사는 xmlbinding 파일 위치에 도움이 될 것입니다.

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