- add support to add external ClassLoaders to BinaryImporter for loading classes
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7559 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
23c992b05b
commit
e9fb72dcf2
@ -37,6 +37,8 @@ import java.util.logging.Logger;
|
||||
|
||||
import com.jme3.export.InputCapsule;
|
||||
import com.jme3.export.Savable;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This class is mis-named and is located in an inappropriate package:
|
||||
@ -80,4 +82,37 @@ public class BinaryClassLoader {
|
||||
}
|
||||
}
|
||||
|
||||
public static Savable fromName(String className, InputCapsule inputCapsule, List<ClassLoader> loaders) throws InstantiationException,
|
||||
IllegalAccessException, ClassNotFoundException, IOException {
|
||||
if(loaders == null){
|
||||
return fromName(className, inputCapsule);
|
||||
}
|
||||
for (Iterator<ClassLoader> it = loaders.iterator(); it.hasNext();) {
|
||||
ClassLoader classLoader = it.next();
|
||||
try {
|
||||
return (Savable)classLoader.loadClass(className).newInstance();
|
||||
}
|
||||
catch (InstantiationException e) {
|
||||
}
|
||||
catch (IllegalAccessException e) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
try {
|
||||
return (Savable)Class.forName(className).newInstance();
|
||||
}
|
||||
catch (InstantiationException e) {
|
||||
Logger.getLogger(BinaryClassLoader.class.getName()).severe(
|
||||
"Could not access constructor of class '" + className + "'! \n" +
|
||||
"Some types need to have the BinaryImporter set up in a special way. Please doublecheck the setup.");
|
||||
throw e;
|
||||
}
|
||||
catch (IllegalAccessException e) {
|
||||
Logger.getLogger(BinaryClassLoader.class.getName()).severe(
|
||||
e.getMessage() + " \n" +
|
||||
"Some types need to have the BinaryImporter set up in a special way. Please doublecheck the setup.");
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -48,8 +48,10 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.IdentityHashMap;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@ -81,14 +83,22 @@ public final class BinaryImporter implements JmeImporter {
|
||||
private int aliasWidth;
|
||||
|
||||
private static final boolean fastRead = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN;
|
||||
|
||||
private List<ClassLoader> loaders;
|
||||
|
||||
public BinaryImporter() {
|
||||
}
|
||||
|
||||
|
||||
public static boolean canUseFastBuffers(){
|
||||
return fastRead;
|
||||
}
|
||||
|
||||
public void addClassLoader(ClassLoader loader){
|
||||
if(loaders == null)
|
||||
loaders = new ArrayList<ClassLoader>();
|
||||
loaders.add(loader);
|
||||
}
|
||||
|
||||
public static BinaryImporter getInstance() {
|
||||
return new BinaryImporter();
|
||||
}
|
||||
@ -284,7 +294,7 @@ public final class BinaryImporter implements JmeImporter {
|
||||
BinaryInputCapsule cap = new BinaryInputCapsule(this, bco);
|
||||
cap.setContent(dataArray, loc, loc+dataLength);
|
||||
|
||||
Savable out = BinaryClassLoader.fromName(bco.className, cap);
|
||||
Savable out = BinaryClassLoader.fromName(bco.className, cap, loaders);
|
||||
|
||||
capsuleTable.put(out, cap);
|
||||
contentTable.put(id, out);
|
||||
|
Loading…
x
Reference in New Issue
Block a user