2014-04-14 20 views
1

我有一个从源XML文件绑定到JAXB对象中的模型。源XML看上去例如像这样:EclipseLink MOXy:将模型绑定到多个XML位置不起作用

<school> ... </school>

一些处理后我的数据模型嵌套象例如这

schoolX courseA student1 courseB student1

当我打电话binder.updateXml(学校),即使student1被分配到课程的两个实例在我的JAXB对象,它会在XML只能放在courseB。

  • 如果student1被分配到多个课程,这是正常行为吗?
  • 当我使用克隆的student1作为其中一门课程时,所有功能都按预期工作。

我的绑定是这样的: <java-type name="School"> <java-attributes> <xml-element java-attribute="courses" xml-path="course/" type="my.model.Course" container-type="java.util.List"/> </java-attributes> </java-type> <java-type name="Course"> <java-attributes> <xml-element java-attribute="students" xml-path="student/" type="my.model.Student" container-type="java.util.List"/> </java-attributes> </java-type> <java-type name="Student"> <java-attributes> <xml-element java-attribute="name" xml-path="@name"/> </java-attributes> </java-type>

回答

1

WRT Binder一个JAXB实现认为有对象和节点之间的1对1的关系。您可以通过以下方法看到这一点:

这就是为什么你碰到问题时,你必须在两个位置相同的实例。对于Binder JAXB实现期望这两个实例是不同的。使用Marshaller时,此要求不存在。

相关问题