Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance EclipseLink MOXy:解组时未设置超类字段_Inheritance_Jaxb_Eclipselink_Moxy - Fatal编程技术网

Inheritance EclipseLink MOXy:解组时未设置超类字段

Inheritance EclipseLink MOXy:解组时未设置超类字段,inheritance,jaxb,eclipselink,moxy,Inheritance,Jaxb,Eclipselink,Moxy,在下面的场景中,我希望超类的字段可以被取消编组,但事实并非如此。怎么做才能使它工作 输入: <?xml version="1.0" encoding="UTF-8"?> <a>my text</a> 演示: 需要对其所属的类进行映射 选项1-映射子类上的超类属性 如果要将超类属性映射为子类的一部分,则需要在java type元素上标记父类transient bindings.xml 选项2-映射超类上的超类属性 或者,您可以将文本属性映射到超类,此映射将

在下面的场景中,我希望超类的字段可以被取消编组,但事实并非如此。怎么做才能使它工作

输入:

<?xml version="1.0" encoding="UTF-8"?>
<a>my text</a>
演示:


需要对其所属的类进行映射

选项1-映射
子类上的
超类
属性
如果要将超类属性映射为子类的一部分,则需要在
java type
元素上标记父类transient

bindings.xml


选项2-映射
超类上的
超类
属性 或者,您可以将
文本
属性映射到
超类
,此映射将由
子类
继承

bindings.xml


演示代码 可以运行以下演示代码来证明这两个选项都有效:

input.xml

你好,世界
演示

导入java.io.File;
导入java.util.*;
导入javax.xml.bind.*;
导入org.eclipse.persistence.jaxb.JAXBContextFactory;
导入org.eclipse.persistence.jaxb.JAXBContextProperties;
公开课演示{
公共静态void main(字符串[]args)引发异常{
Map jaxbContextProperties=newhashmap(1);
put(jaxbContextProperties.OXM_元数据_源,“bindings.xml”);
JAXBContext JAXBContext=JAXBContextFactory.createContext(新类[]{SuperClass.Class},jaxbContextProperties);
Unmarshaller Unmarshaller=jaxbContext.createUnmarshaller();
SuperClass SuperClass=(SuperClass)unmarshaller.unmarshal(新文件(“input.xml”);
System.out.println(超类.getText());
}
}
输出

Hello World

另外,超类的字段可以是——因为您的超类的字段没有设置器,
因为解组器使用不带参数的默认构造函数和设置器来初始化字段。或者超类没有@XmlRootElement和@XmlElement注释,谢谢!实际上,我还有第二个绑定文件,它已经指定了java类型(对于更一般的情况)。因此,我必须重写这个java类型规范,我在这里尝试过,但无法使其工作:
public class SuperClass {

 private String text;

 public String getText() {
    return text;
 }

 public void setText(String text) {
    this.text = text;
 }
}

public class SubClass extends SuperClass { }
Map<String, Object> jaxbContextProperties = new HashMap<String, Object>(1);
jaxbContextProperties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "bindings.xml");
JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[] {SuperClass.class}, jaxbContextProperties);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
SuperClass superClass = (SuperClass)unmarshaller.unmarshal(new File("input.xml"));
System.out.println(superClass.getText());   
[EL Warning]: 2013-07-31 15:09:16.602--Ignoring attribute [text] on class [SubClass] as no Property was generated for it.
null
Hello World