Carregamento dinâmico de uma classe em java com um nome de pacote diferente
É possível carregar uma classe em Java e 'falsificar' o nome do pacote / nome canônico de uma classe? Tentei fazer isso da maneira mais óbvia, mas recebo a mensagem "o nome da classe não corresponde" em umClassDefNotFoundException
.
A razão pela qual estou fazendo isso é que estou tentando carregar uma API que foi escrita no pacote padrão para que eu possa usá-la diretamente sem usar reflexão. O código será compilado na classe em uma estrutura de pastas que representa o pacote e uma importação de nome de pacote. ou seja:
./com/DefaultPackageClass.class
// ...
import com.DefaultPackageClass;
import java.util.Vector;
// ...
Meu código atual é o seguinte:
public 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);
}
}