我正在尝试使用Object字段封送Object(可以是多种类型的类)。然后我将使用套接字发送生成的XML。我的代码如下;
我想上课的课程
public class Message {
private String metadata;
private Object payload;
public Message(String metadata,Object payload)
{
this.metadata=metadata;
this.payload=payload;
}
public Message() {
}
public String getMetadata() {
return metadata;
}
public void setMetadata(String metadata) {
this.metadata = metadata;
}
public Object getPayload() {
return payload;
}
public void setPayload(Object payload) {
this.payload = payload;
}
}
我试图如何编组它的片段。
private Message sendData;
...
JAXBContext jc = JAXBContext.newInstance(sendData.getClass());
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
JAXBElement<Message> rootElement = new JAXBElement<Message>(
new QName(sendData.getClass().getSimpleName()), dataClass,
sendData);
m.marshal(rootElement, stringWriter);
当我第一次尝试使用ArrayLlist时,我收到以下错误:
javax.xml.bind.MarshalException - 链接异常:[com.sun.istack.internal.SAXException2:类java.util.ArrayList也不知道它的任何超类 上下文。 javax.xml.bind.JAXBException:类java.util.ArrayList也不是 在这种背景下,任何超类都是已知的。]
现在我明白它不知道如何解析它。查看并实现了this问题的答案,将Object包装到JAXBElement,我仍然遇到上述错误。
任何想法是如何解决这个问题的?非常感谢!
答案 0 :(得分:5)
JAXB(JSR-222)实现期望类型Object
的属性是单个项而不是集合。这就是你得到例外的原因。
您可以将payload
属性更改为List<Object>
类型。然后可以将奇异值视为大小为1 List
。