3

我正在尝试用 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 或其任何超类在此上下文中都是已知的。]

现在我明白它不知道如何解析它。在查看并实现了这个问题的答案后,将对象包装到 JAXBElement 中,我仍然遇到上述错误。

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

4

1 回答 1

5

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

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

于 2013-07-16T12:05:44.493 回答