ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-08-31 19:12:33  阅读:164  来源: 互联网

标签: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
– with linked exception: [com.sun.istack.internal.SAXException2: class java.util.ArrayList nor any of its super class is known to this
context. javax.xml.bind.JAXBException: class java.util.ArrayList nor
any of its super class is known to this context.]

现在我明白它不知道如何解析它.看了并实现了对this问题的回答,将Object包装到JAXBElement,我仍然遇到了上述错误.

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

解决方法:

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

您可以将有效内容属性更改为类型List< Object>.然后可以将奇异值视为1号列表.

标签:java,jaxb
来源: https://codeday.me/bug/20190831/1777798.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有