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

Popular posts from this blog

php - render data via PDO::FETCH_FUNC vs loop -

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

The canvas has been tainted by cross-origin data in chrome only -