[英]JAXB Marshalling Objects with java.lang.Object field
我正在尝试封送一个对象,该对象将一个对象作为其字段之一。
@XmlRootElement
public class TaskInstance implements Serializable {
...
private Object dataObject;
...
}
dataObject 可以是许多不同的未知类型之一,因此在某处指定每个类型不仅不切实际而且不可能。 当我尝试封送对象时,它说上下文不知道该类。
MockProcessData mpd = new MockProcessData();
TaskInstance ti = new TaskInstance();
ti.setDataObject(mpd);
String ti_m = JAXBMarshall.marshall(ti);
“MockProcessData 或其任何超类在此上下文中都是已知的。” 是我得到的。
有没有办法解决这个错误?
JAXB 无法编组任何旧对象,因为它不知道如何编组。 例如,它不知道要使用什么元素名称。
如果您需要处理此类通配符,唯一的解决方案是将对象包装在JAXBElement
对象中,该对象包含足够的信息供 JAXB 编组为 XML。
尝试类似:
QName elementName = new QName(...); // supply element name here
JAXBElement jaxbElement = new JAXBElement(elementName, mpd.getClass(), mpd);
ti.setDataObject(jaxbElement);
方法:
public String marshallXML(Object object) {
JAXBContext context;
try {
context = JAXBContext.newInstance(object.getClass());
StringWriter writer = new StringWriter();
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(object, writer);
String stringXML = writer.toString();
return stringXML;
} catch (JAXBException e) {
}
}
模型:
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Customer {
String name;
int id;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
@XmlAttribute
public void setId(int id) {
this.id = id;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.