Search

'INVOKE'에 해당되는 글 3건

  1. 2010.03.09 [java] invoke
  2. 2010.01.22 [java] getClass, getMethod, invoke
  3. 2009.09.06 [java] 소스 분석

[java] invoke

프로그래밍/Java 2010. 3. 9. 11:01 Posted by galad
String metaField = ProductConstant.FIELD_NAME_FOR_HD_DRM;
Class[] cParam = new Class[]{String.class}; // 메소드 얻을 때 사용할 파라미터 타입. 메소드명, 파라미터갯수 및 종류로 해당 메소드를 찾는다
Object[] oParam = new Object[]{hdProductDrmYn}; // 실제 invoke 시 사용할 파라미터값

Class cls = pi.getClass(); // 메소드를 invoke할 클래스

// 메소드 얻기 getMethod(메소드명, 파라미터타입) : get 메소드면 파라미터 필요없음
Method cMtd = cls.getMethod("set" + metaField.substring(0, 1).toUpperCase() + metaField.substring(1), cParam);

// invoke(invoke할 객체, 파라미터)
cMtd.invoke(pi, oParam);

'프로그래밍 > Java' 카테고리의 다른 글

[java] 소수점 자리수 / 천단위 콤마  (0) 2010.05.18
[java] Convert Milliseconds to Date  (0) 2010.03.15
[java] getClass, getMethod, invoke  (0) 2010.01.22
[java] Pattern / Matcher  (0) 2010.01.22
[java] 파일 관련  (0) 2010.01.07

[java] getClass, getMethod, invoke

프로그래밍/Java 2010. 1. 22. 15:22 Posted by galad
public static void setAllowedTypes(FileUploadInfo info, SubContentInfo sinfo) throws ContentException {
    log.debug("<< setAllowedTypes >> START");

    Class cls = info.getClass();
    Class scls = sinfo.getClass();
    Method[] mtd = cls.getDeclaredMethods(); // cls에 선언된 모든 메소드를 반환
    Pattern p = Pattern.compile("get_fileUpload_(\\d+)FileName"); // 패턴 설정. \d+ 는 정수 하나 이상(정규식)
    Matcher m = null;
    String mStr = null;
    String mType = null;
    String defExt = null;
    int i;

    for(i = 0; i < mtd.length; i++) { // 모든 메소드만큼 돌면서
        m = p.matcher(mtd[i].getName()); // 메소드명과 패턴을 비교
        if(m.find()) { // 매칭된 것이 발견되면
            try {
                // group으로 매칭된 내용(메소드명)을 받아서 그 메소드를 실행. 파일명을 얻음.
                mStr = FileUploadInfo.getValueOfMethod(info, m.group());
                if(mStr != null) { // 파일명이 존재하는 경우만
                    // group(1)으로 매칭된 번호를 얻어서 메소드 실행. 콘텐트 타입을 얻음.
                    mType = FileUploadInfo.getValueOfMethod(info, "get_fileUpload_" + m.group(1) + "ContentType");
                    // 기본 확장자 지정
                    defExt = "";
                    if(mType != null) {
                        defExt = mStr.substring(mStr.lastIndexOf(".") + 1);
                        defExt = defExt.toLowerCase().trim();
                       
                        log.debug("defExt = " + defExt);
                       
                        if("jpg".equals(defExt) ||
                           "gif".equals(defExt) ||
                           "xml".equals(defExt) ||
                           "xmp".equals(defExt) ||
                           "png".equals(defExt) ||
                           "zip".equals(defExt) ) {
                            // 진행
                        }else {
                            // 오류 발생
                            throw new ContentException("지원하지 않는 파일입니다.");
                        }
                    }
                   
                    Class[] cParam = new Class[]{String.class};
                    // 메소드를 찾는데, 메소드명이 "set...."이고 cParam형식을 파라미터로 갖는 메소드를 반환. null이면 파라미터 없는 메소드
                    // cParam이 Class 배열인 것은 파라미터가 여럿인 메소드가 있기 때문에.
                    // 여기서는 String을 파라미터로 갖는 set_fileUp.... 메소드를 반환.
                    Method cMtd = cls.getMethod("set_fileUpload_" + m.group(1) + "FileName", cParam);
                    Object[] oParam = new Object[]{mStr};
                    // FileUploadInfo에 등록
                    cMtd.invoke(info, oParam); // info의 set_fileUpload_XFileName 메소드를 실행. 파라미터는 oParam
                    // SubContentInfo에 등록
                    // 1. FileUPloadInfo의 FieldName을 찾는다.
                    cMtd = cls.getMethod("get_fileUpload_" + m.group(1) + "FieldName", null);
                    String tmpFieldName = (String)cMtd.invoke(info, null); // 업로드 파일명을 저장할 대상 필드명을 얻어서
                    // 2. SubContentInfo의 의 1번의 Method에 등록한다.
                    cMtd = scls.getMethod("set" + tmpFieldName.substring(0, 1).toUpperCase() + tmpFieldName.substring(1)  , cParam);
                    cMtd.invoke(sinfo, oParam); // 서브콘텐츠info에 저장함.

                }
            }
            catch (ContentException e) {
                log.debug("지원하지 않는 파일 예외 발생", e);
                throw e;
            }
            catch (Exception e) {
                    e.printStackTrace();
            }
        }
    }

}

public static String getValueOfMethod(Object obj, String methodName)
        throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
    String str = "";
    Class cls = obj.getClass();
    Method mtd = cls.getMethod(methodName, null); // 넘겨받은 오브젝트의 클래스의 메소드를 얻어서
    str = (String)mtd.invoke(obj, null); // 메소드를 실행시킴.
    // 이때 파라미터로 받은 오브젝트는 메소드가 실행될 대상 오브젝트. 즉, obj의 메소드 mtd를 실행함.

    return str;
}

동적으로 움직이는 기능을 만들기 위해서는 필수적.

'프로그래밍 > Java' 카테고리의 다른 글

[java] Convert Milliseconds to Date  (0) 2010.03.15
[java] invoke  (0) 2010.03.09
[java] Pattern / Matcher  (0) 2010.01.22
[java] 파일 관련  (0) 2010.01.07
[java] thorws .....  (0) 2009.12.11

[java] 소스 분석

프로그래밍/Java 2009. 9. 6. 15:19 Posted by galad
public static void setAllowedTypes(FileUploadInfo info, SubContentInfo sinfo) throws ContentException {
        log.debug("<< setAllowedTypes >> START");
       
        Class cls = info.getClass();
        Class scls = sinfo.getClass();
        Method[] mtd = cls.getDeclaredMethods();
        Pattern p = Pattern.compile("get_fileUpload_(\\d+)FileName");
        Matcher m = null;
        String mStr = null;
        String mType = null;
        String defExt = null;
        int i;
       
        for(i = 0; i < mtd.length; i++) {
            m = p.matcher(mtd[i].getName());
            if(m.find()) {
                try {
                    // 파일명이 존재하는 경우만
                    mStr = FileUploadInfo.getValueOfMethod(info, m.group());
                    if(mStr != null) {
                        mType = FileUploadInfo.getValueOfMethod(info, "get_fileUpload_" + m.group(1) + "ContentType");
                        // 기본 확장자 지정
                        defExt = "";
                        if(mType != null) {
                            defExt = mStr.substring(mStr.lastIndexOf(".") + 1);
                            defExt = defExt.toLowerCase().trim();
                           
                            log.debug("defExt = " + defExt);
                           
                            if("jpg".equals(defExt) ||
                               "gif".equals(defExt) ||
                               "xml".equals(defExt) ||
                               "xmp".equals(defExt) ||
                               "png".equals(defExt) ||
                               "zip".equals(defExt) ) {
                                // 진행
                            }else {
                                // 오류 발생
                                throw new ContentException("지원하지 않는 파일입니다.");
                            }
                        }
                       
                        Class[] cParam = new Class[]{String.class};
                        Method cMtd = cls.getMethod("set_fileUpload_" + m.group(1) + "FileName", cParam);
                        Object[] oParam = new Object[]{mStr};
                        // FileUploadInfo에 등록
                        cMtd.invoke(info, oParam); // 마찬가지로 첫번째 인자는 실행시킬 메소드를 갖고 있는 obj, 두번째는 실제 메소드의 파라미터
                        // SubContentInfo에 등록
                        // 1. FileUPloadInfo의 FieldName을 찾는다.
                        cMtd = cls.getMethod("get_fileUpload_" + m.group(1) + "FieldName", null);
                        String tmpFieldName = (String)cMtd.invoke(info, null);
                        // 2. SubContentInfo의 의 1번의 Method에 등록한다.
                        cMtd = scls.getMethod("set" + tmpFieldName.substring(0, 1).toUpperCase() + tmpFieldName.substring(1)  , cParam);
                        cMtd.invoke(sinfo, oParam);

                    }
                }
                catch (ContentException e) {
                    log.debug("지원하지 않는 파일 예외 발생", e);
                    throw e;
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
       
    }
   
public static String getValueOfMethod(Object obj, String methodName) throws SecurityException, NoSuchMethodException,                               IllegalArgumentException, IllegalAccessException, InvocationTargetException {
        String str = "";
        Class cls = obj.getClass(); // obj의 클래스 종류를 얻고
        Method mtd = cls.getMethod(methodName, null); // 위에서 얻은 클래스의 어떤 메소드를 얻는데, 메소드명을 인자로 받음
        str = (String)mtd.invoke(obj, null); // 위에서 얻은 메소드를 실행하는데, 그 메소드를 갖고 있는 obj를 인자로 받음?
        return str;
    }