具有多个属性的java Jaxws枚举
我有一个类型类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="Record")
public class Record
{
@XmlAttribute(name="status")
private Status status ;
}
和枚举类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"status","error"})
@XmlEnum
public enum Status
{
OK(0, "No error"),
ERROR(1, "Some error") ;
@XmlAttribute(name="status", required=true)
private Integer status ;
@XmlAttribute(name="error", required=true)
private String error ;
private Status(Integer status, String error)
{
this.status=status ;
this.error=error ;
}
@Override
public String toString()
{
return "Status:" + this.status + " Error:" + this.error;
}
}
我得到的结果是:记录状态=“确定” 但我想要:记录状态=“确定”错误=“无错误”
我怎样才能做到这一点
# 1 楼答案
这与您期望的方式不同,因为JAXB获取枚举名称,而不是使用
toString()
方法。但即使它这样做了,它仍然不会产生你想要的产出。它将产生:使用普通的JAXB无法将中的单个字段自动扩展为多个XML属性。MOXy JAXB实现确实允许您这样做,但我怀疑您是否在使用此实现(有关更多信息,请参见this question)
最简单的解决方案是只添加另一个包含错误消息的属性
此外,在
Status
枚举上实际上不需要任何JAXB注释。唯一需要的时候是希望XML中打印的值与枚举值不同(比如希望OK
在XML中显示为ok
)。请参阅@XmlEnum和@XmlEnumValue注释here