Java class doesn't load correctly under windows
Hi, I'm trying to programatically load a java class file to a folder on the Zope DB called 'JMFiles' during the initialization of a Product called JMColorPicker. It works under linux, but on windows 2000 the applet isn't showed and I got an error on the java console which says: Error loading class: ColorPicker java.lang.ClassFormatError Then I tried to manually load the applet class file on the ZMI and it worked. Printing the filesystem path reveals that it is correctly separated with "\". But, some how, manage_addFile corrupts the file on Windows. The code is attached to the message. Does somebody knows what the error could be? Thanks in advanced, Josef __doc__="""Misc utilities""" __version__ ='$Revision: 0.1 $'[11:-2] #File: Misc.py located on Products/JMUtils DATA_BASE_PATH='/JMFiles' def _createFileInFolder(context, filePath, fileName, zopePath, title=''): """Creates a the folder <zopePath> and puts the file <filePath>/<fileName> on it """ pathLen=len(zopePath) #Remove leading slash if (zopePath[-1]=='/') and (pathLen>1): zopePath=zopePath[0:pathLen-1] if zopePath[0]!='/': #The product will only work with relative paths #if the instances can adquire them. log('The path "%s" is relative.' %zopePath, severity=WARNING,detail='For better results use absolute paths.', product='createFileInFolder') zopePath='/'+zopePath pathParts=os.path.split(zopePath) basePath=pathParts[0] folder=pathParts[1] #This only happens when no slash is given at #the beginning of the path, so the root will #be assumed fileContainer=context.unrestrictedTraverse(basePath,None) if fileContainer==None: log('The path "%s" doesn\'t exist on the Zope DB.' %basePath, severity=PROBLEM,detail='Create it first.', product='createFileInFolder') return fileFolder=fileContainer #If the given path wasn't the zope root if folder!='': try: manage_addFolder(fileContainer,folder,'JMFiles') except: #The Folder already exists pass fileFolder=getattr(fileContainer,folder) absolutePath=os.path.join(filePath,fileName) data=file(absolutePath) try: manage_addFile(fileFolder,fileName,file=data, title=title) except: #The file was already created on a previous session pass I called it on the __init__.py of my Product: __doc__="""JMColorPicker initialization module.""" __version__ ='$Revision: 0.1 $'[11:-2] #File __init__.py located on Products/JMColorPicker from JMColorPicker import JMColorPicker, manage_addJMColorPickerForm, \ manage_addJMColorPicker from Products.JMUtils import Misc import Globals, os PRODUCT_HOME=Globals.package_home(globals()) def initialize(context): try: context.registerClass(JMColorPicker, constructors=( manage_addJMColorPickerForm, manage_addJMColorPicker, ), icon='images/icon.gif', ) context.registerHelp() #The applet is under "PRODUCT_HOME/java" absolutePath=os.path.join(PRODUCT_HOME,'java') appContext=context._ProductContext__app Misc._createFileInFolder(appContext,absolutePath,'ColorPicker.class', Misc.DATA_BASE_PATH,title='ColorPicker Applet') except: from sys import exc_info, stderr from traceback import format_exception from string import join type,val,tb=exc_info() stderr.write(join(format_exception(type, val, tb),'')) del type,val,tb
Josef Meile wrote:
#Remove leading slash if (zopePath[-1]=='/') and (pathLen>1): zopePath=zopePath[0:pathLen-1]
maybe you should use os.sep instead of '/' there?
if zopePath[0]!='/':
...and here.
zopePath='/'+zopePath
...and here, but i can't see where zopePath comes from so I may be wrong.
if folder!='': try: manage_addFolder(fileContainer,folder,'JMFiles') except: #The Folder already exists pass
This is an EXTREMELY silly piece of code. Bare excepts like this are asking for all manner of trouble.
fileFolder=getattr(fileContainer,folder) absolutePath=os.path.join(filePath,fileName) data=file(absolutePath)
oops, that'll be the main source of your problem. should be: data = file(absolutePath,'rb')
try: manage_addFile(fileFolder,fileName,file=data, title=title) except: #The file was already created on a previous session pass
More brain-dead-ed-ness :-( cheers, Chris -- Simplistix - Content Management, Zope & Python Consulting - http://www.simplistix.co.uk
participants (2)
-
Chris Withers -
Josef Meile