- 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.InputCapsule;
|
||||||
import com.jme3.export.Savable;
|
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:
|
* 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.io.InputStream;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.IdentityHashMap;
|
import java.util.IdentityHashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@ -82,6 +84,8 @@ public final class BinaryImporter implements JmeImporter {
|
|||||||
|
|
||||||
private static final boolean fastRead = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN;
|
private static final boolean fastRead = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN;
|
||||||
|
|
||||||
|
private List<ClassLoader> loaders;
|
||||||
|
|
||||||
public BinaryImporter() {
|
public BinaryImporter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,6 +93,12 @@ public final class BinaryImporter implements JmeImporter {
|
|||||||
return fastRead;
|
return fastRead;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addClassLoader(ClassLoader loader){
|
||||||
|
if(loaders == null)
|
||||||
|
loaders = new ArrayList<ClassLoader>();
|
||||||
|
loaders.add(loader);
|
||||||
|
}
|
||||||
|
|
||||||
public static BinaryImporter getInstance() {
|
public static BinaryImporter getInstance() {
|
||||||
return new BinaryImporter();
|
return new BinaryImporter();
|
||||||
}
|
}
|
||||||
@ -284,7 +294,7 @@ public final class BinaryImporter implements JmeImporter {
|
|||||||
BinaryInputCapsule cap = new BinaryInputCapsule(this, bco);
|
BinaryInputCapsule cap = new BinaryInputCapsule(this, bco);
|
||||||
cap.setContent(dataArray, loc, loc+dataLength);
|
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);
|
capsuleTable.put(out, cap);
|
||||||
contentTable.put(id, out);
|
contentTable.put(id, out);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user