JAXB使用java.lang.Object字段编组对象

jco*_*ert 9 java jaxb

我正在尝试编组一个对象作为其字段之一的对象.

@XmlRootElement
public class TaskInstance implements Serializable {
   ...
   private Object dataObject;
   ...
}
Run Code Online (Sandbox Code Playgroud)

dataObject可以是许多不同类型的未知类型之一,因此指定每个地方不仅不切实际而且不可能.当我尝试编组对象时,它表示该类不为上下文所知.

MockProcessData mpd = new MockProcessData();
TaskInstance ti = new TaskInstance();
ti.setDataObject(mpd);

String ti_m = JAXBMarshall.marshall(ti);
Run Code Online (Sandbox Code Playgroud)

"MockProcessData及其任何超类都不为此所知." 就是我得到的.

有没有办法解决这个错误?

ska*_*man 7

JAXB无法封送任何旧对象,因为它不知道如何.例如,它不知道要使用的元素名称.

如果需要处理这种通配符,唯一的解决方案是将对象包装在一个JAXBElement对象中,该对象包含足以让JAXB编组为XML的信息.

尝试类似的东西:

QName elementName = new QName(...); // supply element name here
JAXBElement jaxbElement = new JAXBElement(elementName, mpd.getClass(), mpd);
ti.setDataObject(jaxbElement);
Run Code Online (Sandbox Code Playgroud)