jaxb 一些体会
看到很多中文的技术文章介绍jaxb,但是遇到问题却都没有什么帮助.很多都是转载,举例,例子还很浅,不全面.然后呢,有问题又不知道英文怎么搜索.现在把我遇到问题总结一下,希望对其他人有帮助.
先上例子:
这是公司项目中的程序,未经许可,不得使用.
@XmlRootElement(name ="ResourceDescription")@Entity@Table(name = "resource_description")public class ResourceDescription{private long id;private String resourceId;private String name;private String model;private Date descriptionExpirationTime;private String locationName;private String resourceType;private String temporalAvailability;private Date resourceExpirationTime;private double geoLongitude;private double geoLatitude;private double geoAltitude;private Date lastUpdatedTime;private Date createdTime;private Set<OutputDescription> outputDescriptions;private Set<InputCommandDescription> inputCommandDescriptions;@XmlElement(name = "resourceType")@Column(name = "resource_type")public String getResourceType() {return resourceType;}public void setResourceType(String resourceType) {this.resourceType = resourceType;}@XmlElement(name = "temporalAvailability")@Column(name = "temporal_availability")public String getTemporalAvailability() {return temporalAvailability;}public void setTemporalAvailability(String temporalAvailability) {this.temporalAvailability = temporalAvailability;}public ResourceDescription() {super();}public ResourceDescription(String resourceId) {super();this.resourceId = resourceId;}@XmlTransient@Id@GeneratedValue(generator="identity")@GenericGenerator(name="identity", strategy = "identity")public long getId() {return id;}public void setId(long id) {this.id = id;}@XmlElement(name = "resourceId")@Column(name = "resourceId",unique = true)public String getResourceId() {return resourceId;}public void setResourceId(String resourceId) {this.resourceId = resourceId;}@XmlElement(name = "name")@Column(name = "name")public String getName() {return name;}public void setName(String name) {this.name = name;}@XmlElement(name = "model")@Column(name = "model")public String getModel() {return model;}public void setModel(String model) {this.model = model;}@XmlElement(name = "descriptionExpirationTime")@Temporal(TemporalType.TIMESTAMP)@Column(name = "description_expiration_time")public Date getDescriptionExpirationTime() {return descriptionExpirationTime;}public void setDescriptionExpirationTime(Date descriptionExpirationTime) {this.descriptionExpirationTime = descriptionExpirationTime;}@XmlElement(name = "resourceExpirationTime")@Temporal(TemporalType.TIMESTAMP)@Column(name = "resource_expiration_time")public Date getResourceExpirationTime() {return resourceExpirationTime;}public void setResourceExpirationTime(Date resourceExpirationTime) {this.resourceExpirationTime = resourceExpirationTime;}@XmlElement(name = "geoLongitude")@Column(name = "geo_longitude")public double getGeoLongitude() {return geoLongitude;}public void setGeoLongitude(double geoLongitude) {this.geoLongitude = geoLongitude;}@XmlElement(name = "geoLatitude")@Column(name = "geo_latitude")public double getGeoLatitude() {return geoLatitude;}public void setGeoLatitude(double geoLatitude) {this.geoLatitude = geoLatitude;}@XmlElement(name = "geoAltitude")@Column(name = "geo_altitude")public double getGeoAltitude() {return geoAltitude;}public void setGeoAltitude(double geoAltitude) {this.geoAltitude = geoAltitude;}@XmlElement(name = "locationName")@Column(name = "location_name")public String getLocationName() {return locationName;}public void setLocationName(String locationName) {this.locationName = locationName;}@XmlElement(name = "createdTime")@Temporal(TemporalType.TIMESTAMP)@Column(name = "created_time")public Date getCreatedTime() {return createdTime;}public void setCreatedTime(Date createdTime) {this.createdTime = createdTime;}@XmlElement(name = "lastUpdatedTime")@Temporal(TemporalType.TIMESTAMP)@Column(name = "last_updated_time")public Date getLastUpdatedTime() {return lastUpdatedTime;}public void setLastUpdatedTime(Date lastUpdatedTime) {this.lastUpdatedTime = lastUpdatedTime;}@XmlElementWrapper(name="outputDescriptions")@XmlElement(name = "outputDescription")@OneToMany(cascade={CascadeType.ALL}, targetEntity=com.ericsson.m2m.resourcedirectory.persistence.entity.OutputDescription.class,mappedBy="resourceDescription") public Set<OutputDescription> getOutputDescriptions() {return this.outputDescriptions; } public void setOutputDescriptions(Set<OutputDescription> outputDescriptions) {this.outputDescriptions = outputDescriptions; } @XmlElementWrapper(name="inputCommandDescriptions") @XmlElement(name = "inputCommandDescription") @OneToMany(cascade={CascadeType.ALL}, targetEntity=com.ericsson.m2m.resourcedirectory.persistence.entity.InputCommandDescription.class,mappedBy="resourceDescription") public Set<InputCommandDescription> getInputCommandDescriptions() {return this.inputCommandDescriptions; } public void setInputCommandDescriptions(Set<InputCommandDescription> inputCommandDescriptions) {this.inputCommandDescriptions = inputCommandDescriptions; }}@XmlRootElement(name ="inputCommandDescription")@XmlType(propOrder = { "name", "parameterType", "preCondition", "postCondition" })@Entity@Table(name = "input_command_description")public class InputCommandDescription {private long id;private String name;private String parameterType;private String preCondition;private String postCondition;private ResourceDescription resourceDescription;public InputCommandDescription() {super();}@XmlTransient@Id@GeneratedValue(strategy = GenerationType.AUTO)public long getId() {return id;}public void setId(long id) {this.id = id;}@XmlElement(name = "name")@Column(name = "name")public String getName() {return name;}public void setName(String name) {this.name = name;}@XmlElement(name = "parameterType")@Column(name = "parameter_type")public String getParameterType() {return parameterType;}public void setParameterType(String parameterType) {this.parameterType = parameterType;}@XmlElement(name = "preCondition")@Column(name = "pre_condition")public String getPreCondition() {return preCondition;}public void setPreCondition(String preCondition) {this.preCondition = preCondition;}@XmlElement(name = "postCondition")@Column(name = "post_condition")public String getPostCondition() {return postCondition;}public void setPostCondition(String postCondition) {this.postCondition = postCondition;}@XmlTransient@ManyToOne(targetEntity=com.ericsson.m2m.resourcedirectory.persistence.entity.ResourceDescription.class,cascade={CascadeType.ALL})@JoinColumn(name="resource_description_id")public ResourceDescription getResourceDescription() {return resourceDescription;}public void setResourceDescription(ResourceDescription resourceDescription) {this.resourceDescription = resourceDescription;}这个程序是hibernate和jaxb混在一起的classes定义.查出来的东东直接转xml或json输出.
下面解释一下annotation.
@XmlRootElement(name ="inputCommandDescription") 不说了
@XmlTransient 不想输出的,用它标注一下.注意,防止循环引用,onetomany一定要用,否则
@XmlElementWrapper(name="inputCommandDescriptions") 在list或set外面包一层,好看。
@XmlType(propOrder = { "name", "parameterType", "preCondition", "postCondition" })定义输出顺序
<ResourceDescriptions><ResourceDescription><createdTime>2011-11-11T22:22:22+08:00</createdTime><descriptionExpirationTime>2011-01-13T13:13:13+08:00</descriptionExpirationTime><geoAltitude>231.0</geoAltitude><geoLatitude>12.0</geoLatitude><geoLongitude>34.0</geoLongitude><inputCommandDescriptions><inputCommandDescription><name>3</name><parameterType>3</parameterType><postCondition>3</postCondition><preCondition>3</preCondition></inputCommandDescription><inputCommandDescription><name>1</name><parameterType>1</parameterType><postCondition>1</postCondition><preCondition>1</preCondition></inputCommandDescription><inputCommandDescription><name>4</name><parameterType>4</parameterType><postCondition>4</postCondition><preCondition>4</preCondition></inputCommandDescription></inputCommandDescriptions><lastUpdatedTime>2011-04-04T23:23:23+08:00</lastUpdatedTime><locationName>1</locationName><model>1</model><name>1</name><outputDescriptions><outputDescription><featureName>3</featureName><preCondition>3</preCondition><propertyName>3</propertyName><propertyUnit>3</propertyUnit></outputDescription><outputDescription><featureName>2</featureName><preCondition>2</preCondition><propertyName>2</propertyName><propertyUnit>2</propertyUnit></outputDescription><outputDescription><featureName>1</featureName><preCondition>1</preCondition><propertyName>1</propertyName><propertyUnit>1</propertyUnit></outputDescription></outputDescriptions><resourceExpirationTime>2012-12-12T12:12:12+08:00</resourceExpirationTime><resourceId>1</resourceId><resourceType>1</resourceType><temporalAvailability>1</temporalAvailability></ResourceDescription></ResourceDescriptions>