【发布时间】:2013-07-31 23:19:29
【问题描述】:
在下面的场景中,我希望将java-type name="SubClass" 的绑定应用于设置超类上的文本字段。然而事实并非如此。覆盖 bindingsA.xml 有问题吗?
根据Overriding rules documentation:
如果相同的 java-type 出现在多个文件中,则在后面的文件中设置的任何值都将覆盖前面文件中的值
我需要做什么才能让它工作?
输入:
<?xml version="1.0" encoding="UTF-8"?>
<a text="A text">B text</a>
绑定 A:
<?xml version="1.0"?>
<xml-bindings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="test">
<java-types>
<java-type name="SuperClass">
<xml-root-element name="a"/>
<java-attributes>
<xml-element java-attribute="text" xml-path="@text" />
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
绑定 B:
<?xml version="1.0"?>
<xml-bindings
xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="test">
<java-types>
<java-type name="SuperClass" xml-transient="true"></java-type>
<java-type name="SubClass">
<xml-root-element name="a"/>
<java-attributes>
<xml-element java-attribute="text" xml-path="text()" />
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
类:
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);
List<String> bindings = new LinkedList<String>();
bindings.add("bindingsA.xml");
bindings.add("bindingsB.xml");
jaxbContextProperties.put(JAXBContextProperties.OXM_METADATA_SOURCE, bindings);
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 16:08:07.771--Ignoring attribute [text] on class [SubClass] as no Property was generated for it.
A text
【问题讨论】:
标签: inheritance jaxb eclipselink overriding moxy