학술 목적을위한 HTTP WebServer 프로젝트의 일부로 웹 응용 프로그램 클래스에 대한 고유 한 사용자 정의 클래스 로더를 작성하려고하지만 보이지 않습니다. 그것을 올바르게하기.Java - 사용자 정의 ClassLoader - 클래스 파일 전체 경로를 사용하여 클래스를로드하려고합니다.
일반적으로 웹 응용 프로그램은 자체 폴더에 있으며 웹 응용 프로그램의 ".class"파일은 직접적인 상위 폴더 이름과 같습니다. (예 : Web1/Web1.class). 나는 defineClass()
방법에 도달 할 때까지 아래의 코드는 잘 작동하고 다음과 같은 예외로 날을 던졌습니다 :
java.io.FileNotFoundException: C:\inetpub\javawwwroot\WebApps\java\lang\Object\.Object.class (The system cannot find the path specified)
그것은 C:\inetpub\javawwwroot\WebApps\
부분은 아래의 코드에서 m_WebAppsFullPath
변수를 동일 언급 할 가치가있다. 또한
,
InputStream in = getResourceAsStream(clsFile);
대신 InputStream in = new FileInputStream(clsFile);
내가 널 반환 값을 얻을 ...이
UPDATE 사용하려고 할 때 : 즉, 어떻게로드 할 수 있습니다 "CLASSPATH"에 없거나 내 프로젝트의 패키지에있는 특정 클래스?
protected synchronized Class loadClass(String className, boolean resolve)
throws ClassNotFoundException
{
log("Loading class: " + className + ", resolve: " + resolve);
// 1. is this class already loaded?
Class cls = findLoadedClass(className);
if (cls != null)
{
return cls;
}
// 2. get class file name from class name
String classRelativePath = className.replace('.', '/');
String classFileName =
((className.lastIndexOf('.') != -1) ? className.substring(className.lastIndexOf('.')) : className) + ".class";
String clsFile = m_WebAppsFullPath + "\\" + classRelativePath + "\\" + classFileName;
// 3. get bytes for class
byte[] classBytes = null;
try
{
//InputStream in = getResourceAsStream(clsFile);
InputStream in = new FileInputStream(clsFile);
byte[] buffer = new byte[BUFFER_SIZE];
ByteArrayOutputStream out = new ByteArrayOutputStream();
int n = -1;
while ((n = in.read(buffer, 0, BUFFER_SIZE)) != -1) {
out.write(buffer, 0, n);
}
classBytes = out.toByteArray();
}
catch (IOException e) {
log("ERROR loading class file: " + e);
}
if (classBytes == null) {
throw new ClassNotFoundException("Cannot load class: " + className);
}
// 4. turn the byte array into a Class
try {
cls = defineClass(className, classBytes, 0, classBytes.length);
if (resolve) {
resolveClass(cls);
}
}
catch (SecurityException e) {
// loading core java classes such as java.lang.String
// is prohibited, throws java.lang.SecurityException.
// delegate to parent if not allowed to load class
cls = super.loadClass(className, resolve);
}
return cls;
}
어떻게 작동시킬 수 있습니까?
감사합니다.
전체 예외 스택 추적 –
'... \ Object \ .Object.class' 물론'... \ Object.class'가 필요 없습니다. – vickirk
아니요, Web1이라는 클래스를로드하려고합니다.C : \ inetpub \ javawwwroot \ WebApps \ Web1 \ Web1.class 다음과 같은 디렉토리가 없습니다. C : \ inetpub \ javawwwroot \ WebApps \ java \ lang \ –