code: public Action build(Class<?> clazz) {
      Action action = new Action();
      String className = clazz.getName();
      Profile profile = profileService.getProfile(className);
      org.beangle.struts2.annotation.Action an = clazz
          .getAnnotation(org.beangle.struts2.annotation.Action.class);
      StringBuilder sb = new StringBuilder();
      // namespace
      sb.append(profile.getUriPath());
      if (null != an) {
        String name = an.value();
        if (!name.startsWith("/")) {
          if (Constants.SEO_URI.equals(profile.getUriPathStyle())) {
            sb.append(unCamel(substringBeforeLast(profile.getInfix(className), "/")) + "/" + name);
          } else {
            sb.append(name);
          }
        } else {
          sb.append(name.substring(1));
        }
      } else {
        if (Constants.SHORT_URI.equals(profile.getUriPathStyle())) {
          String simpleName = className.substring(className.lastIndexOf('.') + 1);
          sb.append(uncapitalize(simpleName.substring(0, simpleName.length()
              - profile.getActionSuffix().length())));
        } else if (Constants.SIMPLE_URI.equals(profile.getUriPathStyle())) {
          sb.append(profile.getInfix(className));
        } else if (Constants.SEO_URI.equals(profile.getUriPathStyle())) {
          sb.append(unCamel(profile.getInfix(className)));
        } else {
          throw new RuntimeException("unsupported uri style " + profile.getUriPathStyle());
        }
      }
      action.path(sb.toString());
      action.method(profile.getDefaultMethod()).extention(profile.getUriExtension());
      return action;
    }
docs: 根据class对应的profile获得ctl/action类中除去后缀后的名字。<br>
  如果对应profile中是uriStyle,那么类中只保留简单类名，去掉后缀，并且小写第一个字母。<br>
  否则加上包名，其中的.编成URI路径分割符。包名不做其他处理。<br>
  复杂URL,以/开始
  
  @param className