Thread: [tcljava-user] Java loader failed to load the class
Brought to you by:
mdejong
From: Zapar, W. <Wil...@Ca...> - 2006-04-18 20:04:12
|
Mo, Question? =20 I am trying to load a class file in TCL and I am having a problem. =20 Here is a snip of my code I am working on: =20 #!/usr/bin/expect -- source /home/server/module/startup.tcl =20 if {0} { # this is not needed fo package require, is it needed for import? =20 } =20 #set env(LD_LIBRARY_PATH) {/usr/java/jdk1.5.0_06/jre/lib/i386:/usr/java/jdk1.5.0_06/jre/lib/i386/c lient:/usr/java/jdk1.5.0_06/jre/lib/i386/native_threads:/usr/local/lib/t cljava1.3.2:/opt/tclBlend1.3.2/unix:} =20 set env(LD_LIBRARY_PATH) {/usr/local/lib/tcljava1.3.2:/opt/local/lib/:}; # only this one needed so far =20 ### need both of these for package require java to load lappend auto_path "/opt/tclBlend1.3.2/"; # end slash doesn't matter lappend auto_path "/opt/tclBlend1.3.2/src/xputils/"; # end slash doesn't matter =20 puts "java package ver =3D [package require java]"; =20 puts "java system version =3D [java::call System getProperty "java.version"]"; =20 set err [java::field System err]; $err {println String} "Java in TCL is working!"; # this shows java working =20 set env(CLASSPATH) "$env(TCL_CLASSPATH):/opt/BACCTools/lib/bpr.jar:/opt/BACCTools/lib/suite .jar:/opt/BACCTools/lib/bcprov-jdk14-116.jar:/opt/BACCTools/lib/commons- codec-1.3.jar:/opt/BACCTools/lib/commons-httpclient-3.0-rc2.jar:/opt/BAC CTools/lib/commons-logging.jar:/opt/BACCTools/lib/dom.jar:/opt/BACCTools /lib/org.mortbay.jetty.jar:/opt/BACCTools/lib/saaj-api.jar:/opt/BACCTool s/lib/saaj-impl.jar:/opt/BACCTools/lib/xalan.jar:/opt/BACCTools/lib/xerc esImpl.jar"; =20 #set env(TCL_CLASSPATH) {/usr/local/lib/tcljava1.3.2/tcljava.jar:/usr/local/lib/tcljava1.3.2/tcl blend.jar:/usr/java/jdk1.5.0_06/jre/lib/rt.jar} =20 ### this is for bpr.jar and suite.jar only in /opt/BACCTools/lib/ set env(TCL_CLASSPATH) "/opt/BACCTools/lib/bprjar/com/cisco/provisioning/cpe:/usr/local/lib/tcl java1.3.2/tcljava.jar:/usr/local/lib/tcljava1.3.2/tclblend.jar:/usr/java /jdk1.5.0_06/jre/lib/rt.jar"; =20 ### this is for all jar files in /opt/BACCTools/lib/ =20 #set env(TCL_CLASSPATH) "$env(TCL_CLASSPATH):/opt/BACCTools/lib/bpr.jar:/opt/BACCTools/lib/suite .jar:/opt/BACCTools/lib/bcprov-jdk14-116.jar:/opt/BACCTools/lib/commons- codec-1.3.jar:/opt/BACCTools/lib/commons-httpclient-3.0-rc2.jar:/opt/BAC CTools/lib/commons-logging.jar:/opt/BACCTools/lib/dom.jar:/opt/BACCTools /lib/org.mortbay.jetty.jar:/opt/BACCTools/lib/saaj-api.jar:/opt/BACCTool s/lib/saaj-impl.jar:/opt/BACCTools/lib/xalan.jar:/opt/BACCTools/lib/xerc esImpl.jar"; =20 arrArrayDump env 0; # dump the environment variables =20 #[=20 #proc loadClass {classfile} {=20 # set file [open $classfile r]=20 # fconfigure $file -translation binary -encoding binary=20 # set data [read $file]=20 # return [java::defineclass $data]=20 #}=20 #set class [loadClass "/opt/BACCTools/lib/bprjar/com/cisco/provisioning/cpe/PACEConnectionFact ory.class"]=20 #SET nothing [set myclass [java::new PACEConnectionFactory]]=20 #] =20 #java::load -classpath /opt/BACCTools/lib/ com; #java::load -classpath /opt/BACCTools/lib/ com.cisco; #java::load -classpath /opt/BACCTools/lib/ com.cisco.provisioning; #java::load -classpath /opt/BACCTools/lib/ com.cisco.provisioning.cpe; #java::load -classpath /opt/BACCTools/lib/ com.cisco.provisioning.cpe.PACEConnectionFactory; java::load -classpath /opt/BACCTools/lib/bprjar/com/cisco/provisioning/cpe/ java.lang.Object.com.cisco.provisioning.cpe.PACEConnectionFactory.class; =20 java::import com.cisco.provisioning.cpe.PACEConnectionFactory; # java::import java.lang.object.com.cisco.provisioning.cpe.PACEConnectionFactory; # java::import java.lang.Object.com.cisco.provisioning.cpe.PACEConnectionFactory; # =20 ### imports (both BACC and Java) try two different ways, neither works #set jstr [java::import com.cisco.provisioning.cpe.*]; puts "jstr =3D $jstr"; #java::import com.cisco.provisioning.cpe.*; #java::import com.cisco.provisioning.cpe.api.*; #java::import com.cisco.provisioning.cpe.constants.*; =20 # build tcl classpath =20 append x /opt/BACCTools/lib/bpr.jar; =20 set env(TCL_CLASSPATH) $x =20 puts "\nTCL_CLASSPATH =3D [ array get env TCL_CLASSPATH ]\n" =20 #set bacc [java::call java.lang.Object.com.cisco.provisioning.cpe.PACEConnectionFactory.getIns tance(172.24.195.164, 49187, admin, f0ssil)]; puts "bacc =3D $bacc" #set bacc [java::call com.cisco.provisioning.cpe.PACEConnectionFactory.getInstance(172.24.195. 164, 49187, admin, f0ssil)]; puts "bacc =3D $bacc"; =20 if {0} { # this doesn't use anything but java.lang in TCL =20 ### both methods work (so java.lang.String must already be imported -> yes by default all of java.lang) set jstr [java::new java.lang.String "Long Name Java String"]; puts "jstr =3D $jstr"; # this creates a new java string object set tstr [$jstr toString]; puts "tstr =3D $tstr"; # convert to tcl = string using method toString set jstr [java::new String "Short Name Java String"]; puts "jstr =3D $jstr"; # this creates a new java string object set tstr [$jstr toString]; puts "tstr =3D $tstr"; # convert to tcl = string using method toString =20 ### info on object and class puts "methods =3D [java::info methods $jstr]"; # get info on the java class puts "baseclass =3D [java::info baseclass String]"; # get info on the java class puts "constructors =3D [java::info constructors String]"; # get info on the java class puts "events =3D [java::info events String]"; # get info on the java class puts "fields =3D [java::info fields String]"; # get info on the java class puts "properties =3D [java::info properties String]"; # get info on the java class puts "superclass =3D [java::info superclass String]"; # get info on the java class =20 ### this works to dump static fields from a class #foreach f [java::info fields -static java.util.Calendar] {puts "$f =3D [java::field java.util.Calendar $f]"} } ##### End of File ##### =20 Here is the error I am getting: =20 -bash-2.05b$ ./tcljava.tcl=20 java package ver =3D 1.3.2 java system version =3D 1.5.0_06 Java in TCL is working! load "java.lang.Object.com.cisco.provisioning.cpe.PACEConnectionFactory.class " failed: java.lang.SecurityException: Java loader failed to load the class and the Tcl Java loader is not permitted to load classes in the tcl or java package at runtime, check your CLASSPATH. while executing "java::load -classpath /opt/BACCTools/lib/bprjar/com/cisco/provisioning/cpe/ java.lang.Object.com.cisco.provisioning.cpe.PACEConnectionFactory.class" (file "./tcljava.tcl" line 54) =20 Any ideas? =20 Regards, =20 Will =20 |
From: Mo D. <md...@un...> - 2006-04-19 23:50:49
|
On Tue, 18 Apr 2006 16:02:49 -0400 "Zapar, Will" <Wil...@Ca...> wrote: > "java::load -classpath > /opt/BACCTools/lib/bprjar/com/cisco/provisioning/cpe/ > java.lang.Object.com.cisco.provisioning.cpe.PACEConnectionFactory.class" > (file "./tcljava.tcl" line 54) Will, you need to pass the name of the class, not including the trailing ".class" bit at the end. For example, [java::load foo.bar.Baz] not [java::load foo.bar.Baz.class]. I hope that was the cause of your problem, your post includes many many lines of code, far to many to scan through. Postings should just include a little snip of code that causes the problem. cheers Mo DeJong |