@Override public void fromXml(XmlReader reader,TikXmlConfig config,T value) throws IOException {
  if (reader.hasAttribute()) {
    if (attributeBinders != null) {
      while (reader.hasAttribute()) {
        String attributeName=reader.nextAttributeName();
        AttributeBinder<T> attributeBinder=attributeBinders.get(attributeName);
        if (attributeBinder != null) {
          attributeBinder.fromXml(reader,config,value);
        }
 else {
          if (config.exceptionOnUnreadXml()) {
            throw new IOException("Could not map the xml attribute with the name '" + attributeName + "' at path "+ reader.getPath()+ "to java class. Have you annotated such a field in your java class to map this xml attribute? Otherwise you can turn this error message off with TikXml.Builder().exceptionOnUnreadXml(false).build().");
          }
 else {
            reader.skipAttributeValue();
          }
        }
      }
    }
 else {
      while (reader.hasAttribute()) {
        reader.skipAttribute();
      }
    }
  }
  while (true) {
    if (childElementBinders != null && reader.hasElement()) {
      reader.beginElement();
      String elementName=reader.nextElementName();
      ChildElementBinder<T> childElementBinder=childElementBinders.get(elementName);
      if (childElementBinder != null) {
        childElementBinder.fromXml(reader,config,value);
        reader.endElement();
      }
 else {
        if (config.exceptionOnUnreadXml()) {
          throw new IOException("Could not map the xml element with the name '" + elementName + "' at path "+ reader.getPath()+ " to java class. Have you annotated such a field in your java class to map this xml element? Otherwise you can turn this error message off with TikXml.Builder().exceptionOnUnreadXml(false).build().");
        }
 else {
          reader.skipRemainingElement();
        }
      }
    }
 else     if (reader.hasTextContent()) {
      if (shouldReadTextContent) {
        if (textContent == null) {
          textContent=reader.nextTextContent();
        }
 else {
          if (textContentBuilder == null) {
            textContentBuilder=new StringBuilder(textContent);
          }
          textContentBuilder.append(reader.nextTextContent());
        }
      }
 else {
        if (config.exceptionOnUnreadXml()) {
          throw new IOException("Could not map the xml element's text content at path  at path " + reader.getPath() + " to java class. Have you annotated such a field in your java class to map the xml element's text content? Otherwise you can turn this error message off with TikXml.Builder().exceptionOnUnreadXml(false).build().");
        }
 else {
          reader.skipTextContent();
        }
      }
    }
 else {
      break;
    }
  }
  if (shouldReadTextContent) {
    if (textContentBuilder != null && textContentBuilder.length() > 0) {
      assignTextContent(config,textContentBuilder.toString(),value);
      textContentBuilder.setLength(0);
    }
 else     if (textContent != null) {
      assignTextContent(config,textContent,value);
      textContent=null;
    }
  }
}

@ Override public void fromXml ( XmlReader reader , TikXmlConfig config , T value ) throws IOException { if ( reader . hasAttribute ( ) ) { if ( attributeBinders != null ) { while ( reader . hasAttribute ( ) ) { String attributeName = reader . nextAttributeName ( ) ; AttributeBinder < T > attributeBinder = attributeBinders . get ( attributeName ) ; if ( attributeBinder != null ) { attributeBinder . fromXml ( reader , config , value ) ; } else { if ( config . exceptionOnUnreadXml ( ) ) { throw new IOException ( "Could not map the xml attribute with the name '" + attributeName + "' at path " + reader . getPath ( ) + "to java class. Have you annotated such a field in your java class to map this xml attribute? Otherwise you can turn this error message off with TikXml.Builder().exceptionOnUnreadXml(false).build()." ) ; } else { reader . skipAttributeValue ( ) ; } } } } else { while ( reader . hasAttribute ( ) ) { reader . skipAttribute ( ) ; } } } while ( true ) { if ( childElementBinders != null && reader . hasElement ( ) ) { reader . beginElement ( ) ; String elementName = reader . nextElementName ( ) ; ChildElementBinder < T > childElementBinder = childElementBinders . get ( elementName ) ; if ( childElementBinder != null ) { childElementBinder . fromXml ( reader , config , value ) ; reader . endElement ( ) ; } else { if ( config . exceptionOnUnreadXml ( ) ) { throw new IOException ( "Could not map the xml element with the name '" + elementName + "' at path " + reader . getPath ( ) + " to java class. Have you annotated such a field in your java class to map this xml element? Otherwise you can turn this error message off with TikXml.Builder().exceptionOnUnreadXml(false).build()." ) ; } else { reader . skipRemainingElement ( ) ; } } } else if ( reader . hasTextContent ( ) ) { if ( shouldReadTextContent ) { if ( textContent == null ) { textContent = reader . nextTextContent ( ) ; } else { if ( textContentBuilder == null ) { textContentBuilder = new StringBuilder ( textContent ) ; } textContentBuilder . append ( reader . nextTextContent ( ) ) ; } } else { if ( config . exceptionOnUnreadXml ( ) ) { throw new IOException ( "Could not map the xml element's text content at path  at path " + reader . getPath ( ) + " to java class. Have you annotated such a field in your java class to map the xml element's text content? Otherwise you can turn this error message off with TikXml.Builder().exceptionOnUnreadXml(false).build()." ) ; } else { reader . skipTextContent ( ) ; } } } else { break ; } } if ( shouldReadTextContent ) { if ( textContentBuilder != null && textContentBuilder . length ( ) > 0 ) { assignTextContent ( config , textContentBuilder . toString ( ) , value ) ; textContentBuilder . setLength ( 0 ) ; } else if ( textContent != null ) { assignTextContent ( config , textContent , value ) ; textContent = null ; } } }
override this method and call super . fromxml ( ) to read attributes
