From f0df08b0308b038fff13b31765c8d581506877f4 Mon Sep 17 00:00:00 2001 From: Justin Carter Date: Fri, 24 Mar 2017 10:23:47 +1100 Subject: [PATCH] FC-3105 update javaloader to 1.2 --- packages/farcry/javaloader/JavaLoader.cfc | 136 ++++++++++++++++-- packages/farcry/javaloader/JavaProxy.cfc | 6 +- .../lib/classloader-20100119110136.jar | Bin 7189 -> 0 bytes .../lib/classloader-20120103162851.jar | Bin 0 -> 7382 bytes .../farcry/javaloader/lib/classloader-src.zip | Bin 7604 -> 7716 bytes packages/farcry/javaloader/readme.txt | 6 +- packages/farcry/javaloader/tags/directory.cfm | 25 ---- 7 files changed, 128 insertions(+), 45 deletions(-) delete mode 100644 packages/farcry/javaloader/lib/classloader-20100119110136.jar create mode 100644 packages/farcry/javaloader/lib/classloader-20120103162851.jar delete mode 100644 packages/farcry/javaloader/tags/directory.cfm diff --git a/packages/farcry/javaloader/JavaLoader.cfc b/packages/farcry/javaloader/JavaLoader.cfc index f28900db1..d2b8764ff 100644 --- a/packages/farcry/javaloader/JavaLoader.cfc +++ b/packages/farcry/javaloader/JavaLoader.cfc @@ -17,7 +17,6 @@ Purpose: Utlitity class for loading Java Classes instance.static.uuid = "A0608BEC-0AEB-B46A-0E1E1EC5F3CE7C9C"; - @@ -97,8 +96,122 @@ Purpose: Utlitity class for loading Java Classes + + + + + + + + var local = {}; + var func = 0; //need this as cf8 doesn't like the structure with functions. + var System = createObject("java", "java.lang.System"); + var Thread = createObject("java", "java.lang.Thread"); + var currentClassloader = Thread.currentThread().getContextClassLoader(); + var classLoader = ""; + + if (structCount(arguments) == 4) + { + // the last 2 arguments are the function arguments and class loader + classLoader = arguments[4]; + local.funcArgs = arguments[3]; + } + else if (structCount(arguments) == 3) + { + // 2nd argument could be classloader or function arguments + if (isInstanceOf(arguments[2],"java.lang.ClassLoader")) + { + classLoader = arguments[2]; + } + else if (isStruct(arguments[2])) + { + local.funcArgs = arguments[2]; + } + + // 3rd argument could be classloader or function arguments + if (isInstanceOf(arguments[3],"java.lang.ClassLoader")) + { + classLoader = arguments[3]; + } + else if (isStruct(arguments[3])) + { + local.funcArgs = arguments[3]; + } + } + else if (structCount(arguments) == 2) + { + // the 2nd argument could be a class loader or function arguments + if (isInstanceOf(arguments[2],"java.lang.ClassLoader")) + { + classLoader = arguments[2]; + } + else if (isStruct(arguments[2])) + { + local.funcArgs = arguments[2]; + } + } + + if (!structKeyExists(local,"funcArgs")) + { + local.funcArgs = {}; + } + + if (isSimpleValue(classLoader)) + { + classLoader = getURLClassLoader(); + } + + + + + Thread.currentThread().setContextClassLoader(classloader); + + + + + + + func = arguments[1]; + local.return = func(argumentCollection = local.funcArgs); + + + + + + + + + + Thread.currentThread().setContextClassLoader(currentClassloader); + + + + + + + //need to do this twice, as cf8 has no finally. + Thread.currentThread().setContextClassLoader(currentClassloader); + + if(structKeyExists(local, "return")) + { + return local.return; + } + + + - + @@ -201,7 +314,7 @@ Purpose: Utlitity class for loading Java Classes for(; counter lte len; counter = counter + 1) { dir = directories[counter]; - directoryCopy(dir, path); + $directoryCopy(dir, path); } //then we compile it, and grab that jar @@ -256,10 +369,9 @@ Purpose: Utlitity class for loading Java Classes var counter = 0; - - @@ -364,11 +476,11 @@ Purpose: Utlitity class for loading Java Classes - libName = ListGetAt(name, 1, "-"); + libName = ListGetAt(qJars.name, 1, "-"); //let's not use the lib's that have the same name, but a lower datestamp if(NOT ListFind(jarList, libName)) { - ArrayAppend(aJars, path & "/" & name); + ArrayAppend(aJars, path & "/" & qJars.name); jarList = ListAppend(jarList, libName); } @@ -377,10 +489,6 @@ Purpose: Utlitity class for loading Java Classes - - - - @@ -474,7 +582,7 @@ Copies a directory. @author Joe Rinehart (joe.rinehart@gmail.com) @version 1, July 27, 2005 ---> - + @@ -492,9 +600,9 @@ Copies a directory. - + - \ No newline at end of file + diff --git a/packages/farcry/javaloader/JavaProxy.cfc b/packages/farcry/javaloader/JavaProxy.cfc index 3f1b81225..8da0d2dc3 100644 --- a/packages/farcry/javaloader/JavaProxy.cfc +++ b/packages/farcry/javaloader/JavaProxy.cfc @@ -121,16 +121,16 @@ Mark Mandel 27/08/2007 Created - + - var len = StructCount(arguments); + var len = StructCount(args); var objArray = _getArray().newInstance(_getObjectClass(), len); var counter = 1; var obj = 0; for(; counter <= len; counter++) { - obj = arguments[counter]; + obj = args[counter]; _getArray().set(objArray, counter - 1, obj); } diff --git a/packages/farcry/javaloader/lib/classloader-20100119110136.jar b/packages/farcry/javaloader/lib/classloader-20100119110136.jar deleted file mode 100644 index 0e32922230e028b9c066768bae9efda62b8a3079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7189 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 L713S6836b{7tWWX diff --git a/packages/farcry/javaloader/lib/classloader-20120103162851.jar b/packages/farcry/javaloader/lib/classloader-20120103162851.jar new file mode 100644 index 0000000000000000000000000000000000000000..ea070000cbaa9bc816c7c42ad0a211a2ab82c06a GIT binary patch literal 7382 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 J(*ypq{{ijY&#?di delta 4570 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 - - - - -