[tcljava-user] Java loader failed to load the class
by Will Zapar other posts by this author
Apr 18 2006 1:05PM messages near this date
|
Re: [tcljava-user] Java loader failed to load the class
Mo,
Question?
I am trying to load a class file in TCL and I am having a problem.
Here is a snip of my code I am working on:
#!/usr/bin/expect --
source /home/server/module/startup.tcl
if {0} { # this is not needed fo package require, is it needed for
import?
}
#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:}
set env(LD_LIBRARY_PATH) {/usr/local/lib/tcljava1.3.2:/opt/local/lib/:};
# only this one needed so far
### 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
puts "java package ver = [package require java]";
puts "java system version = [java::call System getProperty
"java.version"]";
set err [java::field System err]; $err {println String} "Java in TCL is
working!"; # this shows java working
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";
#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}
### 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";
### this is for all jar files in /opt/BACCTools/lib/
#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";
arrArrayDump env 0; # dump the environment variables
#[
#proc loadClass {classfile} {
# set file [open $classfile r]
# fconfigure $file -translation binary -encoding binary
# set data [read $file]
# return [java::defineclass $data]
#}
#set class [loadClass
"/opt/BACCTools/lib/bprjar/com/cisco/provisioning/cpe/PACEConnectionFact
ory.class"]
#SET nothing [set myclass [java::new PACEConnectionFactory]]
#]
#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;
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; #
### imports (both BACC and Java) try two different ways, neither works
#set jstr [java::import com.cisco.provisioning.cpe.*]; puts "jstr =
$jstr";
#java::import com.cisco.provisioning.cpe.*;
#java::import com.cisco.provisioning.cpe.api.*;
#java::import com.cisco.provisioning.cpe.constants.*;
# build tcl classpath
append x /opt/BACCTools/lib/bpr.jar;
set env(TCL_CLASSPATH) $x
puts "\nTCL_CLASSPATH = [ array get env TCL_CLASSPATH ]\n"
#set bacc [java::call
java.lang.Object.com.cisco.provisioning.cpe.PACEConnectionFactory.getIns
tance(172.24.195.164, 49187, admin, f0ssil)]; puts "bacc = $bacc"
#set bacc [java::call
com.cisco.provisioning.cpe.PACEConnectionFactory.getInstance(172.24.195.
164, 49187, admin, f0ssil)]; puts "bacc = $bacc";
if {0} { # this doesn't use anything but java.lang in TCL
### 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 = $jstr"; # this creates a new java string object
set tstr [$jstr toString]; puts "tstr = $tstr"; # convert to tcl string
using method toString
set jstr [java::new String "Short Name Java String"]; puts "jstr =
$jstr"; # this creates a new java string object
set tstr [$jstr toString]; puts "tstr = $tstr"; # convert to tcl string
using method toString
### info on object and class
puts "methods = [java::info methods $jstr]"; # get info on the java
class
puts "baseclass = [java::info baseclass String]"; # get info on the
java class
puts "constructors = [java::info constructors String]"; # get info on
the java class
puts "events = [java::info events String]"; # get info on the java
class
puts "fields = [java::info fields String]"; # get info on the java
class
puts "properties = [java::info properties String]"; # get info on the
java class
puts "superclass = [java::info superclass String]"; # get info on the
java class
### this works to dump static fields from a class
#foreach f [java::info fields -static java.util.Calendar] {puts "$f =
[java::field java.util.Calendar $f]"}
}
##### End of File #####
Here is the error I am getting:
-bash-2.05b$ ./tcljava.tcl
java package ver = 1.3.2
java system version = 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)
Any ideas?
Regards,
Will
Thread:
Will Zapar
Mo DeJong
Will Zapar
|