public EnumProperty(Class<E> e, JAXBContextImpl context) throws JAXBException { _enum = e; _typeName = JAXBUtil.getXmlSchemaDatatype(_enum, context); try { XmlEnum xmlEnum = _enum.getAnnotation(XmlEnum.class); _base = xmlEnum.value(); _baseName = JAXBUtil.getXmlSchemaDatatype(_base, context); // XXX check that base is an XML simple type Field[] fields = _enum.getFields(); for (int i = 0; i < fields.length; i++) { Field f = fields[i]; // We only care about actual enum fields if (!fields[i].isEnumConstant()) continue; XmlEnumValue xmlEnumValue = f.getAnnotation(XmlEnumValue.class); E value = Enum.valueOf(_enum, f.getName()); if (xmlEnumValue != null) { _valueMap.put(xmlEnumValue.value(), value); _nameMap.put(value, xmlEnumValue.value()); } else { _valueMap.put(f.getName(), value); _nameMap.put(value, f.getName()); } } } catch (Exception ex) { throw new JAXBException(L.l("Error while introspecting enum {0}", e.getName()), ex); } }