JAXB是一个具有java.lang.object字段的对象

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

我试图用一个对象字段(可以是多种类型的类)封送一个对象。然后,我将使用套接字发送生成的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);
私有消息发送数据;
...
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
属性更改为type
List
。然后,可以将奇异值视为大小为1的
列表

我的实现允许列出一些对象,但不允许列出其他对象。最终使用了XStream!但是谢谢你的帮助!@斯图·怀特:你能用XStream提供你的解决方案吗。