All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.virtualan.core.util.VirtualanClassLoader Maven / Gradle / Ivy

package io.virtualan.core.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class VirtualanClassLoader extends ClassLoader {

  public VirtualanClassLoader(ClassLoader parent) {
    super(parent);
  }

  private File isGeneratedFile(File file, String fileName) {
    if (file.isDirectory()) {
      for (File child : file.listFiles()) {
        File file1 = isGeneratedFile(child, fileName);
        if (file1 != null) {
          return file1;
        }
      }
    } else {
      if (file.getAbsolutePath().replace(File.separator, ".").endsWith(fileName + ".class")) {
        return file;
      }
    }
    return null;
  }

  public Class loadClass(String name) throws ClassNotFoundException {
    File file = isGeneratedFile(VirtualanConfiguration.getDestPath(), name);
    if (file != null) {
      try {
        URL myUrl = file.toURI().toURL();
        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();
        try {
          return super.loadClass(name);
        } catch (ClassNotFoundException e) {
          //ignore and load
        }
        return defineClass(name,
            classData, 0, classData.length);
      } catch (MalformedURLException e) {
        log.warn("MYClassloader : " + e.getMessage());
      } catch (IOException e) {
        log.warn("MYClassloader : " + e.getMessage());
      }
    }
    return super.loadClass(name);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy