private boolean checkContent(VElement elem, T o, Method m) throws Exception {
    if (getAnnotation(m, Content.class) == null) {
      return false;
    }
    Class cls = m.getReturnType();
    String value = null;
    if (!cls.isPrimitive() && !isWrapperType(cls) && cls != String.class) {
      // otherwise check if it defines a converter
      Converter con = getAnnotation(m, Converter.class);
      if (con == null) {
        throw new VXMLBindingException(
                "Content Specification is invalid. The following Content class is not accepted:"
                + cls.getName());
      }
      VConverter vcon = (VConverter) con.converter().newInstance();
      if (!vcon.isConvertCapable(cls)) {
        throw new VXMLBindingException(
                "Content Specification is invalid. The following Content class: "
                + ""
                + cls.getName()
                + " could not be converted with the specified converter: "
                + vcon.getClass());
      }
      value = vcon.convert(m.invoke(o, new Object[]{}));
    } else {
      Object resValue = m.invoke(o, new Object[]{});
      if (resValue != null) {
        value = resValue.toString();
      }
    }
    if (value != null) {
      // is the value content supposed to be CDATA
      CData cData = getAnnotation(m, CData.class);
      if (cData != null) {
        value = "<![CDATA[" + value + "]]>";
      }
      elem.addChild(new VContent(value));
    }
    return true;
  }