JAXB Marshalling Objects with java.lang.Object field

前端 未结 2 729
遥遥无期
遥遥无期 2020-12-15 00:37

I\'m trying to marshal an object that has an Object as one of its fields.

@XmlRootElement
public class TaskInstance implements Serializable {
   ...
   priva         


        
相关标签:
2条回答
  • 2020-12-15 00:55

    Method:

    public String marshallXML(Object object) {
            JAXBContext context;
            try {
                context = JAXBContext.newInstance(object.getClass());
                StringWriter writer = new StringWriter();
                Marshaller marshaller = context.createMarshaller();
                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
                marshaller.marshal(object, writer);
                String stringXML = writer.toString();
                return stringXML;
            } catch (JAXBException e) {
    
            }
    }
    

    Model:

    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    @XmlRootElement
    public class Customer {
        String name;
        int id;
        public String getName() {
            return name;
        }
        @XmlElement
        public void setName(String name) {
            this.name = name;
        }
        public int getId() {
            return id;
        }
        @XmlAttribute
        public void setId(int id) {
            this.id = id;
        }
    }
    
    0 讨论(0)
  • 2020-12-15 01:13

    JAXB cannot marshal any old object, since it doesn't know how. For example, it wouldn't know what element name to use.

    If you need to handle this sort of wildcard, the only solution is to wrap the objects in a JAXBElement object, which contains enough information for JAXB to marshal to XML.

    Try something like:

    QName elementName = new QName(...); // supply element name here
    JAXBElement jaxbElement = new JAXBElement(elementName, mpd.getClass(), mpd);
    ti.setDataObject(jaxbElement);
    
    0 讨论(0)
提交回复
热议问题