gpt4 book ai didi

java - 使用 java.lang.Object 字段的 JAXB 编码对象

转载 作者:行者123 更新时间:2023-12-01 05:01:29 26 4
gpt4 key购买 nike

我正在尝试编码(marshal)一个将对象作为其字段之一的对象。

@XmlRootElement
public class TaskInstance implements Serializable {
...
private Object dataObject;
...
}

dataObject 可以是许多不同的未知类型之一,因此在某处指定每个类型不仅不切实际,而且是不可能的。当我尝试编码(marshal)对象时,它说上下文不知道该类。

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

String ti_m = JAXBMarshall.marshall(ti);

“MockProcessData 或其任何父类(super class)在此上下文中都是已知的。”这就是我得到的。

有办法解决这个错误吗?

最佳答案

JAXB 无法编码(marshal)任何旧对象,因为它不知道如何编码(marshal)。例如,它不知道要使用什么元素名称。

如果您需要处理此类通配符,唯一的解决方案是将对象包装在 JAXBElement 对象中,该对象包含 JAXB 编码到 XML 所需的足够信息。

尝试如下:

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

关于java - 使用 java.lang.Object 字段的 JAXB 编码对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13339011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com