우리는 동적 클래스 로더 프로젝트에서 작업 중이며 URLClassLoader를 통해 동적으로로드 된 클래스에서 메소드를 호출하려고합니다. 이클립스에서 실행될 때 꽤 잘 작동하기 때문에 호출하는 클래스와 동적으로로드되는 클래스는 두 개의 다른 jar에 번들되고 두 개의 jar로 분할되어야하기 때문에 서버에 배치된다.자바 리플렉션에 의해 메소드를 호출 할 수 없습니다 : NoSuchMethodException
NoSuchMethodException
반사 API를 사용하여 mapClass.getDeclaredMethod("run", oneParam)
을 호출 할 때 예외가 발생합니다.
우리는 Jar를 확인했으며 호출되는 메소드가 클래스에 있음을 확인합니다. 여기
는import com.altova.io.Input;
import com.altova.io.FileInput;
Input sourceInput = new FileInput(inputFileFullPath);
Class oneParam[] = { Input.class };
Object mapObj = mapClass.newInstance();
Method method = mapClass.getDeclaredMethod(RUN, oneParam);
li = (List) method.invoke(mapObj, sourceInput);
예외 (파라미터)에서 I는 (메소드 서명)에서 입력 및 fileinput 함수 의심
java.lang.NoSuchMethodException:
com.sample.test.TrackingService.run(com.altova.io.Input)
유일한 차이점이다 .. 샘플 코드이다.
Eclipse에서는 제대로 작동하지만 서버에서는 제대로 작동하지 않습니다. JDK 1.6 & 1.7 테스트하지만, 서버는 JDK 1.7
두 번째 옵션을 실행 .. 시도 아래와 같이하지만,이 시간이
java.lang.IllegalArgumentException가 발생 것 : 인수 형식이 일치하지
을 코드
for (Method method : mapClass.getDeclaredMethods()) {
method.setAccessible(true);
if (method.getName().equals("run")) {
Class<?>[] params = method.getParameterTypes();
if (params.length == 2) {
if (params[0].isInstance(sourceInput) && params[1].isInstance(outputStream)) {
li = (List<ByteArrayOutputStream>) method.invoke(mapObj, sourceInput, outputStream);
System.out.println(" Parsing is complete:");
}
}
}}
@Dirk Lachowski가 게시물을 명확하고 합리적인 것으로 편집 해 주셔서 감사합니다. – Ramesh