**XML to be generated from java object**
<automobiles>
<cars>
<type></type>
<car>
<model></model>
<maxspeed></maxspeed>
</car>
<car>
<model></model>
<maxspeed></maxspeed>
</car>
</cars>
<bikes>
<type></type>
<bike>
<model></model>
<maxspeed></maxspeed>
</bike>
<bike>
<model></model>
<maxspeed></maxspeed>
</bike>
</bikes>
</automobiles>
//保存xml值的对象类是
@XmlRootElement(name = "automobiles")
class Automobiles {
private List<Cars> cars = null;
private List<Bikes> bikes = null;
@XmlElement
public List<Bikes> getBikes() {
return bikes;
}
public void setBikes(List<Bikes> bikes) {
this.bikes = bikes;
}
@XmlElement
public List<Cars> getCars() {
return cars;
}
public void setCars(List<Cars> cars) {
this.cars = cars;
}
}
@XmlRootElement(name = "cars")
class Cars {
private List<Car> car = null;
@XmlElement
public List<Car> getCar() {
return car;
}
public void setCar(List<Car> car) {
this.car = car;
}
}
@XmlRootElement(name = "bikes")
class Bikes {
private List<Bike> bike = null;
@XmlElement
public List<Bike> getBikes() {
return bike;
}
public void setBikes(List<Bike> bike) {
this.bike = bike;
}
}
@XmlRootElement(name = "Car")
class Car {
private String model = null;
private String maxspeed = null;
@XmlElement
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
@XmlElement
public String getMaxspeed() {
return maxspeed;
}
public void setMaxspeed(String maxspeed) {
this.maxspeed = maxspeed;
}
}
@XmlRootElement(name = "Bike")
class Bike {
private String model = null;
private String maxspeed = null;
@XmlElement
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
@XmlElement
public String getMaxspeed() {
return maxspeed;
}
public void setMaxspeed(String maxspeed) {
this.maxspeed = maxspeed;
}
}
这里的上面的xml是我需要使用JAXB编组生成的格式。 我是JAXB的新手。我使用的对象类和注释是否正确?有人可以帮我解决这个问题。
答案 0 :(得分:1)
您没有说明您的代码存在哪个问题。 但我观察了这些事情;
您只需要根元素@XmlRootElement
,
即class Automobiles
,但不是其他人。
您使用@XmlElement
注释而未指定name
。
然后,XML元素名称从方法名称派生。
在大多数情况下这很好,但并非在所有情况下都如此。
例如,在课程Bikes
中,您有
@XmlElement
public List<Bike> getBikes() { ... }
这隐式映射到XML元素<bikes>
,
这是错误的,因为您希望将其映射到<bike>
。
您可以通过两种方式解决此问题:
通过在注释中明确指定名称(首选方式)
@XmlElement(name = "bike")
public List<Bike> getBikes() { ... }
或者通过更改方法名称(不是首选,因为奇异的方法名称很奇怪)
@XmlElement
public List<Bike> getBike() { ... }