我正在尝试使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
我如何试图编组它的片段.
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);
Run Code Online (Sandbox Code Playgroud)
当我第一次尝试使用ArrayLlist时,我收到以下错误:
javax.xml.bind.MarshalException - 包含链接异常:[com.sun.istack.internal.SAXException2:类java.util.ArrayList或其任何超类都为此上下文所知.javax.xml.bind.JAXBException:类java.util.ArrayList以及它的任何超类都是这个上下文已知的.]
现在我明白它不知道如何解析它.看了并实现了这个问题的答案,你将Object包装到JAXBElement,我仍然遇到了上述错误.
任何想法我怎么能解决这个问题?非常感激!
JAXB(JSR-222)实现将期望类型的属性Object是单个项而不是集合.这就是你得到例外的原因.
您可以将payload属性更改为类型List<Object>.然后可以将奇异值视为大小1 List.