JAXB编组一个具有java.lang.Object字段的对象

时间:2013-07-16 11:49:31

标签: java jaxb

我正在尝试使用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,我仍然遇到上述错误。

任何想法是如何解决这个问题的?非常感谢!

1 个答案:

答案 0 :(得分:5)

JAXB(JSR-222)实现期望类型Object的属性是单个项而不是集合。这就是你得到例外的原因。

您可以将payload属性更改为List<Object>类型。然后可以将奇异值视为大小为1 List