java - JAXB un-marshaling return null -
i have class following structure
@xmlrootelement @xmlaccessortype(xmlaccesstype.field) @xmlseealso({ child.class }) public abstract class parent implements serializable{}
and
public class child extends parent implements serializable{ private string attribute; private list<string> values = new arraylist<string>() ; }
so while marshaling child object saved @ database :
<?xml version="1.0" encoding="utf-8" standalone="yes"?> <child > <attribute>age</attribute> <values>1</values> <values>2</values> </child >
the problem while un-marshaling object , unmarshal function return null.
jaxb.unmarshal(reader, parent.class)
could please advise problem , , how solve ?
thanks in advance
when unmarshalling, must:
- provide root of xml element marked @xmlrootelement.
- define classes compliant java beans (get/set methods on attributes).
here code worked me: parent.java
package dummy; import java.io.serializable; import javax.xml.bind.annotation.xmlrootelement; import javax.xml.bind.annotation.xmlseealso; @xmlrootelement @xmlseealso({ child.class }) public abstract class parent implements serializable{}
child (with small main method marshalling , unmarshalling same payload)
package dummy; import java.io.bytearrayinputstream; import java.io.serializable; import java.io.stringwriter; import java.util.arraylist; import java.util.arrays; import java.util.list; import javax.xml.bind.jaxbcontext; import javax.xml.bind.jaxbexception; import javax.xml.bind.annotation.xmlrootelement; @xmlrootelement public class child extends parent implements serializable { private string attribute; private list<string> values = new arraylist<string>(); /** * @return attribute */ public string getattribute() { return attribute; } /** * @param attribute * attribute set */ public void setattribute(string attribute) { this.attribute = attribute; } /** * @return values */ public list<string> getvalues() { return values; } /** * @param values * values set */ public void setvalues(list<string> values) { this.values = values; } public static void main(string[] args) throws jaxbexception { jaxbcontext context = jaxbcontext.newinstance(parent.class); child child = new child(); child.setattribute("dummy"); child.setvalues(arrays.aslist("value1", "value2")); stringwriter writer = new stringwriter(); context.createmarshaller().marshal(child, writer); system.out.println(writer.getbuffer().tostring()); child unmarshalledchild = (child) context.createunmarshaller().unmarshal(new bytearrayinputstream(writer.getbuffer().tostring().getbytes())); system.out.println("attribute: " + unmarshalledchild.attribute); system.out.println("values: " + unmarshalledchild.values); }
}
and successful output:
<?xml version="1.0" encoding="utf-8" standalone="yes"?><child> <attribute>dummy</attribute><values>value1</values><values>value2</values></child> attribute: dummy values: [value1, value2]
Comments
Post a Comment