/**
  * Process a given JavaAtribute.
  *
  * @param javaAttribute
  * @param oldProperty
  * @param nsInfo
  * @return
  */
 private Property processJavaAttribute(
     TypeInfo typeInfo,
     JavaAttribute javaAttribute,
     Property oldProperty,
     NamespaceInfo nsInfo,
     JavaType javaType) {
   if (javaAttribute instanceof XmlAnyAttribute) {
     return processXmlAnyAttribute(
         (XmlAnyAttribute) javaAttribute, oldProperty, typeInfo, javaType);
   } else if (javaAttribute instanceof XmlAnyElement) {
     return processXmlAnyElement((XmlAnyElement) javaAttribute, oldProperty, typeInfo, javaType);
   } else if (javaAttribute instanceof XmlAttribute) {
     return processXmlAttribute((XmlAttribute) javaAttribute, oldProperty, typeInfo, nsInfo);
   } else if (javaAttribute instanceof XmlElement) {
     return processXmlElement((XmlElement) javaAttribute, oldProperty, typeInfo, nsInfo);
   } else if (javaAttribute instanceof XmlElements) {
     return processXmlElements((XmlElements) javaAttribute, oldProperty, typeInfo);
   } else if (javaAttribute instanceof XmlElementRef) {
     return processXmlElementRef((XmlElementRef) javaAttribute, oldProperty, typeInfo);
   } else if (javaAttribute instanceof XmlElementRefs) {
     return processXmlElementRefs((XmlElementRefs) javaAttribute, oldProperty, typeInfo);
   } else if (javaAttribute instanceof XmlTransient) {
     return processXmlTransient((XmlTransient) javaAttribute, oldProperty);
   } else if (javaAttribute instanceof XmlValue) {
     return processXmlValue((XmlValue) javaAttribute, oldProperty, typeInfo, javaType);
   } else if (javaAttribute instanceof XmlJavaTypeAdapter) {
     return processXmlJavaTypeAdapter((XmlJavaTypeAdapter) javaAttribute, oldProperty);
   }
   getLogger()
       .logWarning(
           "jaxb_metadata_warning_invalid_java_attribute",
           new Object[] {javaAttribute.getClass()});
   return null;
 }
 /**
  * Process a given JavaType's attributes.
  *
  * @param javaType
  * @param typeInfo
  * @param nsInfo
  */
 private void processJavaType(JavaType javaType, TypeInfo typeInfo, NamespaceInfo nsInfo) {
   // process field/property overrides
   if (null != javaType.getJavaAttributes()) {
     for (JAXBElement jaxbElement : javaType.getJavaAttributes().getJavaAttribute()) {
       JavaAttribute javaAttribute = (JavaAttribute) jaxbElement.getValue();
       Property oldProperty = typeInfo.getProperties().get(javaAttribute.getJavaAttribute());
       if (oldProperty == null) {
         getLogger()
             .logWarning(
                 JAXBMetadataLogger.NO_PROPERTY_FOR_JAVA_ATTRIBUTE,
                 new Object[] {javaAttribute.getJavaAttribute(), javaType.getName()});
         continue;
       }
       Property newProperty =
           processJavaAttribute(typeInfo, javaAttribute, oldProperty, nsInfo, javaType);
       typeInfo.getProperties().put(javaAttribute.getJavaAttribute(), newProperty);
     }
   }
 }