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

Stu*_*yte 3 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;
    }

}
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,我仍然遇到了上述错误.

任何想法我怎么能解决这个问题?非常感激!

bdo*_*han 5

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

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