Java 使用泛型参数对类进行解组

Java 使用泛型参数对类进行解组,java,xml,jaxb,unmarshalling,Java,Xml,Jaxb,Unmarshalling,我正在尝试使用库JAXB将xml字符串反序列化到特定类 public class Sandbox { public static void main(String[] args) throws JAXBException { String xml = "<root><child><base-value>val1</base-value><baseimpl-value>val2</baseimpl-value

我正在尝试使用库JAXB将xml字符串反序列化到特定类

public class Sandbox {
    public static void main(String[] args) throws JAXBException {
        String xml = "<root><child><base-value>val1</base-value><baseimpl-value>val2</baseimpl-value></child></root>";
        Sandbox.Do(xml, BaseImpl.class);
    }

    public static void Do(String xml, Class c) throws JAXBException{
        JAXBContext jc = JAXBContext.newInstance(Parent.class, c);
        Unmarshaller um = jc.createUnmarshaller();

        Parent<BaseImpl> p = (Parent<BaseImpl>) um.unmarshal(new StringReader(xml));
        System.out.println(p.child);
    }
}

@XmlRootElement(name = "root")
class Parent<T extends Base> {
    @XmlElement
    T child;
}

abstract class Base {
    @XmlElement(name = "base-value")
    String BaseValue;
}

@XmlRootElement
class BaseImpl extends Base {
    @XmlElement(name = "baseimpl-value")
    String BaseImplValue;

    @Override
    public String toString(){
        return super.BaseValue + ", " + this.BaseImplValue;
    }
}
公共类沙箱{
公共静态void main(字符串[]args)抛出JAXBEException{
字符串xml=“val1val2”;
Do(xml,BaseImpl.class);
}
公共静态voiddo(字符串xml,类c)抛出jaxbeexception{
JAXBContext jc=JAXBContext.newInstance(Parent.class,c);
解组器um=jc.createUnmarshaller();
父p=(父)um.unmarshal(新的StringReader(xml));
系统输出打印项次(p.child);
}
}
@XmlRootElement(name=“root”)
班级家长{
@XmlElement
T儿童;
}
抽象类基{
@xmlement(name=“基本值”)
字符串基值;
}
@XmlRootElement
类BaseImpl扩展了Base{
@xmlement(name=“baseimpl值”)
字符串基值;
@凌驾
公共字符串toString(){
返回super.BaseValue+“,”+this.BaseImplValue;
}
}

JAXB正在尝试初始化
Base
接口,但异常失败
无法创建sandbox.Base…
事件的实例,尽管类名被传递给
JAXBContext.newInstance
函数。

我又花了几个小时诅咒JAXB,最终找到了问题的解决方案。缺少的是
@XmlRootElement(name=“child”)
注释中的param
name
。这就是我所需要的,一切正常

希望有人会觉得这有帮助,节省他的时间