java - JAXB @XmlAttribute @XmlValue real example

java – JAXB @XmlAttribute @XmlValue real example

java – JAXB @XmlAttribute @XmlValue real example

Thank you Blaise Doughan.
But after dug more over 10 topics I decide I HAD TO to start with opposite way.

I created new test which MARSHALLING my data (objects). Actually, I used TDD (test Driven Development) way I think.
So, I filled up my Objects with test data and applied Marshalling (created XML from DATA) and saw that I got. Data Was Incorrect. I looked to other topic also (thanx this one Java/JAXB: Unmarshall Xml to specific subclass based on an attribute ) and correct my data Structure

remember Id like to get

<?xml version=1.0 encoding=UTF-8 standalone=yes?>
<response>
    <code>1000</code>
    <message>Big message</message>
    <resData>
        <data name=svDate>2013.03.14</data>
    </resData>
</response>

Now my data are :

package net.regmaster.onlinenic.model.response.resdata;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;

import org.eclipse.persistence.oxm.annotations.XmlCustomizer;

/**
 * @author annik
 *
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name=data)
//@XmlCustomizer(ResDataCustomiser.class)
public class XmlData
{
    @XmlAttribute(name=name)
    private String name;

    @XmlValue
    private String value;

    /** Getter.
     * @return the name
     */
    public String getName() {
        return name;
    }

    /** Setter.
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /** Getter.
     * @return the value
     */
    public String getValue() {
        return value;
    }

    /** Setter.
     * @param value the value to set
     */
    public void setValue(String value) {
        this.value = value;
    }
}

and :

package net.regmaster.onlinenic.model.response.resdata;

import java.util.List;

import javax.xml.bind.annotation.XmlRootElement;

/**
 * @author annik
 * 
 */
@XmlRootElement
public class ResData
{
    private List<XmlData> data;

    /**
     * Getter.
     * 
     * @return the data
     */
    public List<XmlData> getData() {
        return data;
    }

    /**
     * Setter.
     * 
     * @param data
     *            the data to set
     */
    public void setData(List<XmlData> data) {
        this.data = data;
    }
}

and :

package net.regmaster.onlinenic.model.response;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;

import net.regmaster.onlinenic.enumtype.OnicEnumAction;
import net.regmaster.onlinenic.enumtype.OnicEnumCategory;
import net.regmaster.onlinenic.model.response.resdata.ResData;
import net.regmaster.onlinenic.model.response.resdata.XmlData;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author annik
 * 
 */
@XmlRootElement(name = response)
//@XmlType( propOrder = { category, action, code, message})
public class OnicGreetingResponse
{
    private OnicEnumCategory category;
    private OnicEnumAction   action;
    private Integer          code;
    private String           message;

//    private GreetingResData  resData;
    private ResData resData;

    //
    @XmlTransient
    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
     */
    @XmlElements(value={@XmlElement})
    public String getMessage() {
        return message;
    }

    /**
     * Setter.
     * 
     * @param message
     *            the message to set
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /** Getter.
     * @return the resData
     */
    public ResData getResData() {
        return resData;
    }

    /** Setter.
     * @param resData the resData to set
     */
    @XmlElement
    public void setResData(ResData resData) {
        this.resData = resData;
    }

    @Override
    public String toString() {
        return category= + category + , action= + action + , code= + code + , msg= + message
                + , resData: + resData.toString();
    }
}

and vu-alja :
I got that !

And as you can see below it works to another way :
http://i.stack.imgur.com/35nzb.png

java – JAXB @XmlAttribute @XmlValue real example

Related posts on java  :

Leave a Reply

Your email address will not be published.