简体   繁体   English

我如何让JAXB选择枚举?

[英]How do I get JAXB to choose enum?

I'm trying to convert the XML text to a Java object, but there is a number in the prQueryStatus XML attribute. 我正在尝试将XML文本转换为Java对象,但是prQueryStatus XML属性中有一个数字。 The type of the Java field is an enum . Java字段的类型是一个enum Is there a way for JAXB to choose my enum ? JAXB是否可以选择我的enum

Strxml: Strxml:

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

faulty row: 错误的行:

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

XmlOperations.deserializeFromXML(): 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: 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;
    }

}

enum: 枚举:

public enum PrQueryStatus {
  NONE,
  ACIK,
  TUMU
}

You need to annotate your enum type with @XmlEnum and its constants with @XmlEnumValue , so that JAXB will know how to map from XML attributes ( "0" , "1" , "2" ) to the enum constants ( NONE , ACIK , TUMU ): 您需要使用您的注释枚举类型@XmlEnum及其与常量@XmlEnumValue ,使JAXB将知道如何从XML属性映射( "0""1""2" ),以枚举常数( NONEACIKTUMU ):

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM