/**
   * Handle xml-any-element. If the property was annotated with @XmlAnyElement in code all values
   * will be overridden.
   *
   * @param xmlAnyElement
   * @param oldProperty
   * @param tInfo
   * @param javaType
   * @return
   */
  private Property processXmlAnyElement(
      XmlAnyElement xmlAnyElement, Property oldProperty, TypeInfo tInfo, JavaType javaType) {
    // reset any existing values
    resetProperty(oldProperty, tInfo);

    // set xml-any-element specific properties
    oldProperty.setIsAny(true);
    oldProperty.setDomHandlerClassName(xmlAnyElement.getDomHandler());
    oldProperty.setLax(xmlAnyElement.isLax());
    oldProperty.setMixedContent(xmlAnyElement.isXmlMixed());
    oldProperty.setXmlJavaTypeAdapter(xmlAnyElement.getXmlJavaTypeAdapter());

    // update TypeInfo
    tInfo.setMixed(xmlAnyElement.isXmlMixed());
    tInfo.setAnyElementPropertyName(oldProperty.getPropertyName());

    return oldProperty;
  }
  /**
   * Return all of the declared <code>JavaFields</code> for this <code>JavaClass</code>.
   *
   * @return A <code>Collection</code> containing this <code>JavaClass'</code> <code>JavaFields
   *     </code>.
   */
  public Collection<JavaField> getDeclaredFields() {
    List<JavaField> fieldsToReturn = new ArrayList<JavaField>();

    if (this.enumValues != null) {
      for (Iterator<String> iterator = this.enumValues.iterator(); iterator.hasNext(); ) {
        fieldsToReturn.add(new OXMJavaFieldImpl(iterator.next(), JAVA_LANG_OBJECT, this));
      }
    } else {
      JavaAttributes javaAttributes = this.javaType.getJavaAttributes();
      if (null != javaAttributes) {
        List<JAXBElement<? extends JavaAttribute>> fields = javaAttributes.getJavaAttribute();

        for (Iterator<JAXBElement<? extends JavaAttribute>> iterator = fields.iterator();
            iterator.hasNext(); ) {
          JAXBElement<? extends JavaAttribute> jaxbElement = iterator.next();

          JavaAttribute att = (JavaAttribute) jaxbElement.getValue();

          if (att instanceof XmlElement) {
            XmlElement xme = (XmlElement) att;
            String fieldName = xme.getJavaAttribute();
            String fieldType = xme.getType();
            fieldsToReturn.add(new OXMJavaFieldImpl(fieldName, fieldType, this));
          } else if (att instanceof XmlElements) {
            XmlElements xmes = (XmlElements) att;
            String fieldName = xmes.getJavaAttribute();
            String fieldType = JAVA_LANG_OBJECT;
            fieldsToReturn.add(new OXMJavaFieldImpl(fieldName, fieldType, this));
          } else if (att instanceof XmlElementRef) {
            XmlElementRef xmer = (XmlElementRef) att;
            String fieldName = xmer.getJavaAttribute();
            String fieldType = xmer.getType();
            fieldsToReturn.add(new OXMJavaFieldImpl(fieldName, fieldType, this));
          } else if (att instanceof XmlAttribute) {
            XmlAttribute xma = (XmlAttribute) att;
            String fieldName = xma.getJavaAttribute();
            String fieldType = xma.getType();
            fieldsToReturn.add(new OXMJavaFieldImpl(fieldName, fieldType, this));
          } else if (att instanceof XmlValue) {
            XmlValue xmv = (XmlValue) att;
            String fieldName = xmv.getJavaAttribute();
            String fieldType = xmv.getType();
            fieldsToReturn.add(new OXMJavaFieldImpl(fieldName, fieldType, this));
          } else if (att instanceof XmlAnyElement) {
            XmlAnyElement xmae = (XmlAnyElement) att;
            String fieldName = xmae.getJavaAttribute();
            String fieldType = JAVA_LANG_OBJECT;
            fieldsToReturn.add(new OXMJavaFieldImpl(fieldName, fieldType, this));
          } else if (att instanceof XmlAnyAttribute) {
            XmlAnyAttribute xmaa = (XmlAnyAttribute) att;
            String fieldName = xmaa.getJavaAttribute();
            String fieldType = JAVA_UTIL_MAP;
            fieldsToReturn.add(new OXMJavaFieldImpl(fieldName, fieldType, this));
          } else if (att instanceof XmlJoinNodes) {
            XmlJoinNodes xmjn = (XmlJoinNodes) att;
            String fieldName = xmjn.getJavaAttribute();
            String fieldType = xmjn.getType();
            fieldsToReturn.add(new OXMJavaFieldImpl(fieldName, fieldType, this));
          } else if (att instanceof XmlInverseReference) {
            XmlInverseReference xmir = (XmlInverseReference) att;
            String fieldName = xmir.getJavaAttribute();
            String fieldType = xmir.getType();
            fieldsToReturn.add(new OXMJavaFieldImpl(fieldName, fieldType, this));
          }
        }
      }
    }

    return fieldsToReturn;
  }