@Override
   public void characters(char[] ch, int start, int length) throws SAXException {
      String value = new String(ch, start, length);
      Object tos = objectStack.size() > 0 ? objectStack.peek() : null;
      FieldRef fieldRef = null;
      try {
         if (tos instanceof GedcomTag) {
            ((GedcomTag)tos).appendValue(value);
         }
         else if (tos instanceof FieldRef) {
            fieldRef = (FieldRef)tos;
            fieldRef.appendValue(value);
         }
         else {
            fieldRef = new FieldRef(tos, "Value");
            fieldRef.setValue(value);
         }
      }
      catch (NoSuchMethodException e) {
         if (fieldRef.getFieldName().equals("Value")) {
            // this object doesn't have a value field, so we're going to drop these characters on the floor
            SAXParseException exception = new SAXParseException("value not stored for: "+joinTagStack(), locator);
            error(exception);
         }
         else {
            // if we don't find the method, it's programmer error
            SAXParseException exception = new SAXParseException("get method not found for: "+fieldRef.getClassFieldName(), locator);
            fatalError(exception);
            throw exception;
         }
      }
   }