JAXB @XmlAttribute @XmlValue exemple réel

Je suis nouveau sur JAXB et avoir des ennuis avec la conversion de XML en Java instance de classe.

J'ai le code XML suivant:

<?xml version="1.0"?>
<response>
    <category>client</category>
    <action>Greeting</action>
    <code>1000</code>
    <msg>Your Connection with API Server is Successful</msg>
    <resData>
        <data name="svDate">2009-02-16 06:22:21</data>
    </resData>
</response>

et je développe le code Java suivant:

/**
* Copyright 2013. ABN Software. All Rights reserved.<br>
* Author ...... Andre<br>
* Created ..... 14.03.2013<br>
* <br>
*/
package net.regmaster.onlinenic.model;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;
import net.regmaster.onlinenic.enumtype.OnicEnumAction;
import net.regmaster.onlinenic.enumtype.OnicEnumCategory;
import net.regmaster.onlinenic.model.resdata.GreetingResData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author annik
* 
*/
@XmlRootElement(name = "response")
//@XmlType( propOrder = { "category", "action", "code", "message"})
public class OnicGreeting
{
private OnicEnumCategory category;
private OnicEnumAction   action;
private Integer          code;
private String           message;
private GreetingResData  resData;
//
private Logger           LOG = LoggerFactory.getLogger(getClass());
/**
* Getter.
* 
* @return the category
*/
public OnicEnumCategory getCategory() {
return category;
}
/**
* Setter.
* 
* @param category
*            the category to set
*/
public void setCategoryEnum(OnicEnumCategory category) {
this.category = category;
}
@XmlElement
public void setCategory(String category) {
try {
this.category = OnicEnumCategory.getEnum(category);
} catch (Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
LOG.error(e.getMessage());
}
}
/**
* Getter.
* 
* @return the action
*/
public OnicEnumAction getAction() {
return action;
}
/**
* Setter.
* 
* @param action
*            the action to set
*/
public void setActionEnum(OnicEnumAction action) {
this.action = action;
}
@XmlElement
public void setAction(String action) {
try {
this.action = OnicEnumAction.getEnum(action);
} catch (Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
LOG.error(e.getMessage());
}
}
/**
* Getter.
* 
* @return the code
*/
@XmlElement
public Integer getCode() {
return code;
}
/**
* Setter.
* 
* @param code
*            the code to set
*/
public void setCode(Integer code) {
this.code = code;
}
/**
* Getter.
* 
* @return the message
*/
@XmlElement(name = "msg")
public String getMessage() {
return message;
}
/**
* Setter.
* 
* @param message
*            the message to set
*/
public void setMessage(String message) {
this.message = message;
}
/**
* Getter.
* 
* @return the resData
*/
@XmlElementRef
public GreetingResData getResData() {
return resData;
}
/**
* Setter.
* 
* @param resData
*            the resData to set
*/
public void setResData(GreetingResData resData) {
this.resData = resData;
}
@Override
public String toString() {
return "category=" + category + ", action=" + action + ", code=" + code + ", msg=" + message
+ ", resData:" + resData.toString();
}
}

et

/**
* Copyright 2013. ABN Software. All Rights reserved.<br>
* Author ...... Andre<br>
* Created ..... 14.03.2013<br>
* <br>
*/
package net.regmaster.onlinenic.model.resdata;
import java.util.Calendar;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
/**
* @author annik
* 
*/
@XmlRootElement(name="resData")
public class GreetingResData extends AbstractResData
{
String svDate;
/**
* Constructor.
* 
*/
public GreetingResData() {
//TODO Auto-generated constructor stub
}
/**
* Getter.
* 
* @return the svDate
*/
@XmlAttribute
public String getSvDate() {
return svDate;
}
/**
* Setter.
* 
* @param svDate
*            the svDate to set
*/
public void setSvDate(String svDate) {
this.svDate = svDate;
}
}

Ces exemples de code exécuté, mais les données de mal :

http://i.stack.imgur.com/qCCIM.png

S'il vous plaît aider moi.

Aussi je ne comprends pas dans le cas que je vais avoir beaucoup de différents

<data ...>..</data> 

Que pouvais-je faire facilement et simplement?

Je veux dire, ce cas:

<resData>
<data name="crDate">2004-12-17</data>
<data name="exDate">2009-01-02</data>
<data name="password">7fe11fd9d97ee40bdf57e561427c0a6</data>
<data name="dns">dns1.onlinenic.net</data>
<data name="dns">dns2.onlinenic.net</data>
<data name="r_name">123456</data>
<data name="r_org">123456</data>
<data name="r_country">BJ</data>
<data name="r_province">mokcup</data>
<data name="r_city">123456</data>
<data name="r_street">123456</data>
<data name="r_postalcode">123456</data>
<data name="r_voice">+86.5925391800</data>
<data name="r_fax">+86.5925391800</data>
<data name="r_email">asdfasdf@sadf.com</data>
....
L'exemple suivant peut aider: github.com/bdoughan/blog20110322

OriginalL'auteur AnNik | 2013-03-14