Java'da bir sınıf yüklemek ve bir sınıfın paket adını/kurallı adını 'sahte' yüklemek mümkün mü? Bunu yapmayı denedim, açık yol, ama bir "sınıf adı eşleşmiyor" iletisini ClassDefNotFoundException
numaralı telefondan aldım.Farklı bir paket adıyla java'da dinamik yükleme
Bunu yapmamın nedeni, varsayılan pakette yazılmış bir API yüklemeye çalışıyorum, böylece yansımayı kullanmadan doğrudan kullanabilmem için. Kod, paketi temsil eden bir klasör yapısında ve paket adını içe aktarmada sınıfla derlenir. yani:
./com/DefaultPackageClass.class
// ...
import com.DefaultPackageClass;
import java.util.Vector;
// ...
Benim şu anki kod aşağıdaki gibidir:
Belkipublic Class loadClass(String name) throws ClassNotFoundException {
if(!CLASS_NAME.equals(name))
return super.loadClass(name);
try {
URL myUrl = new URL(fileUrl);
URLConnection connection = myUrl.openConnection();
InputStream input = connection.getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int data = input.read();
while(data != -1){
buffer.write(data);
data = input.read();
}
input.close();
byte[] classData = buffer.toByteArray();
return defineClass(CLASS_NAME,
classData, 0, classData.length);
} catch (MalformedURLException e) {
throw new UndeclaredThrowableException(e);
} catch (IOException e) {
throw new UndeclaredThrowableException(e);
}
}
Hayır, kaynağa erişimim yok. Sınıfları bir dizine taşımak, derleme aşamasında görünse de çalışma zamanında çalışmaz. Mümkünse sınıfı hacklememeyi tercih ederim. –
Çalışma zamanında bir sınıfın paketini değiştirmenin hack olmadığını mı söylüyorsun? Bana göre soru, en kötü hack nedir ve sonra diğerini kullanın ... – FelixM