java - 如何让 JAXB 选择枚举?

标签 java xml enums jaxb

我正在尝试将 XML 文本转换为 Java 对象,但 prQueryStatus XML 属性中有一个数字。 Java 字段的类型是enum。 JAXB 有没有办法选择我的枚举

Strxml:

 <custom prQueryStatus="1" ></custom>

错误行:

  CustAttrPrQuery custom = (CustAttrPrQuery)XmlOperations.deserializeFromXML(CustAttrPrQuery.class, strXmlCustom);

XmlOperations.deserializeFromXML():

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");
    }

}  

CustAttrPrQuery:

@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 注释您的枚举类型 及其常数 @XmlEnumValue , 以便 JAXB 知道如何从 XML 属性("0""1""2")映射到枚举常量( ACIKTUMU):

@XmlEnum
public enum PrQueryStatus {
    @XmlEnumValue("0") NONE,
    @XmlEnumValue("1") ACIK,
    @XmlEnumValue("2") TUMU
}

关于java - 如何让 JAXB 选择枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310196/

相关文章:

java - 多次调用 Button 的 OnClickListener

java.io.File 自定义文件名

java - 无法使用 Intellij Idea 执行 Xpath

java - Docusign 收件人状态

enums - F#枚举到字符串的转换

java - 使用基本枚举作为依赖枚举的默认值

java - 链接库时找不到符号

xml - 如何验证 xml 文件在 sh 或 bash 中是否有效?

c# - 如何正确使用 automapper 将 bool 映射到枚举?

xml - 在 SQL Server 中,确定给定字符串是否为有效 XML 的最佳方法是什么?