이런 경우, NoSuchMethodError 에러 어떻게 잡아야 하나요?

3,244 views
Skip to first unread message

Mark Sunghun Park

unread,
Jul 23, 2014, 5:09:59 AM7/23/14
to ksug
안녕하세요?

매번 질문만 올리네요. 다름이 아니라 제가 만든 간단한 라이브러리를 인젝션해서 유닛테스트를 만들었습니다. 컨트롤러와 서비스 테스트 모두 정상입니다. 그런데 실제 웹브라우져에서 해당 URL을 호출하면 라이브러리에서 호출한 메소드를 찾을 수 없다는 에러가 납니다. 분명히 컨트롤러까지는 잘 호출되고 서비스에서 라이브러리에 있는 해당 메소드를 호출하다가 나는 에러입니다.

호출 URL:
http://localhost:8080/loggedin/jwms/ecc/getecccdr?accountno=400005&phoneid=600231


에러 메세지:
java.lang.NoSuchMethodError: au.org.jeenee.restapi.JwmsRestApi.getEccCdr(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lau/org/jeenee/restapi/models/JsonResult;
    at au.org.jeenee.loggedin.services.MainServiceImpl.getEccCdr(MainServiceImpl.java:251)


하지만 희한하게도 컨틀롤러 테스트에서는
this.mockMvc.perform(post("/jwms/ecc/getecccdr")
                .param("accountno", "111111")
                .param("phoneid",     "111111")
                .accept(MediaType.APPLICATION_JSON)
        )

메소드가 매개변수가 약간 다른 것은 서비스 클래스에서 나머지 두 파라미터를 자동 생성해서 호출하기 때문입니다.
@Override
    public JsonResult<List<Map<String, String>>> getEccCdr(String accountNo,
            String phoneId) {
        log.info("********** getEccCdr starts: accountNo:{} phoneId:{}**********", accountNo, phoneId);
       
        JsonResult<List<Map<String, String>>> result = new JsonResult<List<Map<String, String>>>();

        try {
           
            Calendar c = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
            String end   = sdf.format(c.getTime()) + "-31";
           
            c.add(Calendar.MONTH, -13);
            String start = sdf.format(c.getTime()) + "-01" ;
           
            result = jwmsRestApi.getEccCdr(accountNo, phoneId, start, end); //Error !!!

       
        log.info("********** getEccCdr ends: {} **********", result);
        return result;
    }




정상적으로 잘 동작합니다. 해당 클래스에 딱 getEccCdr 만 빼고는 모두 잘 호출이 됩니다.
저 메소드는 제가 만든 라이브러리에 포함되어 있는데, 해당 메소드 이름을 변경한 후 버전을 올려서 로컬 repo로 설치했습니다. 당연히 어플 메이븐에서도 업데이트 버전을 사용하고 있습니다. 로컬 리포에서 해당 라이브러리 파일 지웠다가 다시 설치하기도 해보고 이클립스 다시 시작도 해보고 프로젝트도 업데이트 해보고 시스템도 다시 껐다가 켜보기도 했습니다. 그래도 여전히 저 에러가 납니다.

제 머리로는 아직 뭐가 문제인지 감이 잘 안옵니다. 어디를 어떻게 확인해야 할까요?

이용구

unread,
Jul 23, 2014, 7:47:44 AM7/23/14
to ks...@googlegroups.com
Clean 하고 Build 해보시고 또 안되시면 강제로 Build 된 class 파일들을 모두 지우고 한번 해보세영!



--
이 메일은 Google 그룹스 'Korea Spring User Group Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/ksug에서 이 그룹을 방문하세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/ksug/CAA_cjCe43_1WV-aBO8c4RjyuMNuu1Q_pCafjmtzv9C2FGxJ9Ug%40mail.gmail.com을(를) 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.



--
- Koo Lee

편현장

unread,
Jul 24, 2014, 11:41:17 AM7/24/14
to ks...@googlegroups.com
결국 이러나 저라나 런타임시에 au.org.jeenee.restapi.JwmsRestApi 클래스를 읽었을 때 원하는 형태의 메소드가 아닌 형태를 읽어들이는 것입니다. 따라서, 다음과 같이 문제가 되는 jar 파일이 그 놈이 맞는지 확인해보세요.

java.net.URL r = this.getClass().getClassLoader().getResource("au/org/jeenee/restapi/JwmsRestApi.class");
System.out.println(r.toString());

이렇게 찍으면 저 클래스가 들어있는 jar 파일의 절대경로가 나오는데, 메이븐으로 인스톨한 그놈이 맞는지, 맞다면 디컴파일해봐서 정말 컴파일된 파일이 들어가 있는지 뒤에서부터 앞으로 찾아가다보면 원인을 찾을 수 있을겁니다.


2014년 7월 23일 오후 6:09, Mark Sunghun Park <mark.sun...@gmail.com>님이 작성:

--
이 메일은 Google 그룹스 'Korea Spring User Group Q&A' 그룹에 가입한 분들에게 전송되는 메시지입니다.
이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면 ksug+uns...@googlegroups.com에 이메일을 보내세요.
http://groups.google.com/group/ksug에서 이 그룹을 방문하세요.
웹에서 이 토론을 보려면 https://groups.google.com/d/msgid/ksug/CAA_cjCe43_1WV-aBO8c4RjyuMNuu1Q_pCafjmtzv9C2FGxJ9Ug%40mail.gmail.com을(를) 방문하세요.
더 많은 옵션을 보려면 https://groups.google.com/d/optout을(를) 방문하세요.



--
==========================================================
COMAS  Hyun-Jang, Pyun
Assistent Manager / R&D Div. / Solution Business  Comas, Inc.
(Bangbae-Dong) Nambu beltway 2145, Seocho-Gu, Seoul 137-820, Korea
Tel :  +82-2-3218-6300 
Mobile : +82-10-8565-8071  /  Fax : +82-2-3218-6370
E-mail : ker...@comas.co.krslot...@gmail.com

Mark Sunghun Park

unread,
Jul 28, 2014, 6:11:59 AM7/28/14
to ksug
답변 감사합니다. 몇 번이나 프로젝트 클리어하고 리프레시하고 하다가 갑자기 어느 순간 부터 정상 동작 하더군요. 가끔씩 이런 현상이 생기는 것 같아요. 이클립스가 너무 무거워서 그러는 건지...


Reply all
Reply to author
Forward
0 new messages