안녕하세요?
매번 질문만 올리네요. 다름이 아니라 제가 만든 간단한 라이브러리를 인젝션해서 유닛테스트를 만들었습니다. 컨트롤러와 서비스 테스트 모두 정상입니다. 그런데 실제 웹브라우져에서 해당 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로 설치했습니다. 당연히 어플 메이븐에서도 업데이트 버전을 사용하고 있습니다. 로컬 리포에서 해당 라이브러리 파일 지웠다가 다시 설치하기도 해보고 이클립스 다시 시작도 해보고 프로젝트도 업데이트 해보고 시스템도 다시 껐다가 켜보기도 했습니다. 그래도 여전히 저 에러가 납니다.
제 머리로는 아직 뭐가 문제인지 감이 잘 안옵니다. 어디를 어떻게 확인해야 할까요?