Java 如何让JAXB选择枚举?
我试图将XML文本转换为Java对象,但是Java 如何让JAXB选择枚举?,java,xml,enums,jaxb,Java,Xml,Enums,Jaxb,我试图将XML文本转换为Java对象,但是prQueryStatusXML属性中有一个数字。Java字段的类型是enum。JAXB有没有办法选择我的enum Strxml: <custom prQueryStatus="1" ></custom> XmlOperations.deserializeFromXML(): 客户查询: @XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD) @XmlRo
prQueryStatus
XML属性中有一个数字。Java字段的类型是enum
。JAXB有没有办法选择我的enum
Strxml:
<custom prQueryStatus="1" ></custom>
XmlOperations.deserializeFromXML():
客户查询:
@XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
@XmlRootElement(name = CustAttrPrQuery.RootElement)
public class CustAttrPrQuery {
public final static String RootElement = "custom";
@javax.xml.bind.annotation.XmlAttribute
private PrQueryStatus prQueryStatus = PrQueryStatus.NONE;
public PrQueryStatus getPrQueryStatus() {
return prQueryStatus;
}
public void setPrQueryStatus(PrQueryStatus prQueryStatus) {
this.prQueryStatus = prQueryStatus;
}
}
枚举:
您需要使用 和它的常数, 因此,JAXB将知道如何从XML属性(
“0”
,“1”
,“2”
)映射到枚举常量(NONE
,ACIK
,TUMU
):
public static Object deserializeFromXML(Class obj, String strXml) {
Object result = null;
JAXBContext jaxbContext;
try {
jaxbContext = JAXBContext.newInstance(obj);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(strXml);
result = unmarshaller.unmarshal(reader);
return result;
} catch (JAXBException e) {
return new String("-3 JAXB deSerialize Error");
}
}
@XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
@XmlRootElement(name = CustAttrPrQuery.RootElement)
public class CustAttrPrQuery {
public final static String RootElement = "custom";
@javax.xml.bind.annotation.XmlAttribute
private PrQueryStatus prQueryStatus = PrQueryStatus.NONE;
public PrQueryStatus getPrQueryStatus() {
return prQueryStatus;
}
public void setPrQueryStatus(PrQueryStatus prQueryStatus) {
this.prQueryStatus = prQueryStatus;
}
}
public enum PrQueryStatus {
NONE,
ACIK,
TUMU
}
@XmlEnum
public enum PrQueryStatus {
@XmlEnumValue("0") NONE,
@XmlEnumValue("1") ACIK,
@XmlEnumValue("2") TUMU
}