gpt4 book ai didi

java - Moxy 无法解码覆盖父类(super class)的子类字段

转载 作者:行者123 更新时间:2023-11-30 07:19:15 27 4
gpt4 key购买 nike

当使用Moxy将示例xml解码到子级时,它总是无法获取名称。它始终为空。

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

如果我无法对 Parent 类进行任何更改,我怎样才能获得这个值。

谢谢

最佳答案

挖掘后http://blog.bdoughan.com和堆栈溢出。

好吧,我终于在 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>

带有代码

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

然后可以获取/设置父类(super class)中的值。

如果您使用 Maven,本文可能会帮助您找到 xmlbinding 文件位置。

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

关于java - Moxy 无法解码覆盖父类(super class)的子类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37872310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com