JAXB是一个具有java.lang.object字段的对象
我试图用一个对象字段(可以是多种类型的类)封送一个对象。然后,我将使用套接字发送生成的XML。我的代码如下 我想参加的班级JAXB是一个具有java.lang.object字段的对象,java,jaxb,Java,Jaxb,我试图用一个对象字段(可以是多种类型的类)封送一个对象。然后,我将使用套接字发送生成的XML。我的代码如下 我想参加的班级 public class Message { private String metadata; private Object payload; public Message(String metadata,Object payload) { this.metadata=metadata; this.pa
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);
私有消息发送数据;
...
JAXBContext jc=JAXBContext.newInstance(sendData.getClass());
Marshaller m=jc.createMarshaller();
m、 setProperty(Marshaller.JAXB_格式化的_输出,true);
JAXBElement rootElement=新的JAXBElement(
新的QName(sendData.getClass().getSimpleName()),dataClass,
发送数据);
m、 封送员(rootElement、stringWriter);
当我第一次尝试使用ArrayList时,我得到了以下错误:
javax.xml.bind.MarshalException
-链接异常:[com.sun.istack.internal.SAXException2:class java.util.ArrayList,其任何超类对此都不了解
context.javax.xml.bind.JAXBException:class java.util.ArrayList或
其任何超类在此上下文中都是已知的。]
现在我明白了,它不知道如何解析它。在查看并实现了问题的答案(将对象包装到JAXBElement中)之后,我仍然得到了上面的错误
你知道我该怎么做吗?非常感谢 JAXB(JSR-222)实现将期望Object
类型的属性是单个项而不是集合。这就是为什么会出现异常
您可以将
payload
属性更改为typeList
。然后,可以将奇异值视为大小为1的列表
我的实现允许列出一些对象,但不允许列出其他对象。最终使用了XStream!但是谢谢你的帮助!@斯图·怀特:你能用XStream提供你的解决方案吗。