|
Help! Prompted the excellent article by Geert Van Landeghem,I've been tinkering (fumbling blindly would be more accurate) around with calling Java methods from RPG to generate / update Excel spreadsheets (using the classes provided by the Jakarta Poi APIs - http://jakarta.apache.org/poi/hssf/index.html). Has anyone used this with some degree of success? I've managed to write programs (batch and interactive) that will create spreadsheets from scratch and write them out to the IFS (which are then emailed out to users), but I'm having a problem when I try to open up an existing spreadsheet for updating ( I only need to change the contents of particular cells & re-save the file, plus it means I can use charts & other bits and pieces). I can call my program interactively with no problems at all (having first set my CLASSPATH to point to where the .jar file is within the IFS) and get an updated spreadsheet at the end of it that is persisted to the IFS, but if I try to run it with a SBMJOB I get the error message: ***** Message . . . . : Java exception received when calling Java method. Cause . . . . . : RPG procedure JAVAXLS8 in program DHWORKLIB/JAVAXLS8 received Java exception "java.io.IOException:" when calling method "<init>" with signature "(Ljava.io.InputStream;)V" in class "org.apache.poi.poifs.filesystem.POIFSFileSystem". Recovery . . . : Contact the person responsible for program maintenance to determine the cause of the problem. Technical description . . . . . . . . : If the exception indicates that the Java class was not found, ensure the class for the method is in the class path. If the exception indicates that the Java method was not found, check the method name and signature. If the signature is not correct, change the RPG prototype for the method, or change the Java method, so that the return type and parameter types match. You can determine the signatures for all the methods in class XYZ using command QSH CMD('javap -s XYZ'). ***** Not much help to the uninitiated .... Here's a code snippet from the program in question: 0006.00 D jInStream S O CLASS(*JAVA: 0007.00 D 'java.io.FileInputStream') 0029.00 D inFile S LIKE( jInStream) 0089.00 // Get pointer to JNI Environment 0090.00 JNIEnv_P = getJNIEnv2(); 0091.00 If JNIEnv_P = *NULL; 0092.00 *INLR = *ON; 0093.00 Return; 0094.00 EndIf; 0095.00 0096.00 // Create a new local reference frame so we can clear all the 0097.00 // java objects in one go 0090.00 JNIEnv_P = getJNIEnv2(); 0091.00 If JNIEnv_P = *NULL; 0092.00 *INLR = *ON; 0093.00 Return; 0094.00 EndIf; 0095.00 0096.00 // Create a new local reference frame so we can clear all the 0097.00 // java objects in one go 0098.00 0099.00 pushFrame( JNIEnv_P: capacity); 0100.00 0101.00 // Create a string object to contain the filename 0102.00 wrkString = createString( %trim(IFSFile)); 0103.00 // Trim filename (50A). 0104.00 filename = trimString( wrkString); 0105.00 // Create FileInputStream. 0106.00 inFile = openFile( filename); // a FileInputStream is passed into the poi method so that the // workbook can be opened and loaded 0107.00 fs = createPOIFSFileSystemForInput( inFile); 0108.00 // Load the workbook 0109.00 wb = openWorkbook( fs); (It's probably not relevant, but) I'm using the JNI to create/destroy JVM and do garbage collection thanks to some really useful articles posted by Barbara Morris. The error occurs when statement 0107.00 is executed. The batch job doesn't seem to have any problems coping with calling other Java methods (to create String objects, numbers etc), and I don't think it's a CLASSPATH problem?. Is there some issue with using a FileInputStream in a batch job or something?? Apologies in advance, but as you've probably already deduced, I don't have any Java experience at all. I'm on V5R2 of the O/S and using JDK 1.3 if that helps any ? FYI Here's my FileInputStream contructor prototype 0017.00 * // FileInputStream CONSTRUCTOR 0018.00 * // openHandle = openFile( fileName) 0019.00 D openFile PR O EXTPROC(*JAVA: 0020.00 D 'java.io.FileInputStream': 0021.00 D *CONSTRUCTOR) 0022.00 D fileName O CLASS(*JAVA: 0023.00 D 'java.lang.String') 0024.00 And here is my POIFSFileSytem prototype (if it helps) 0021.00 * // createPOIFSFileSystemForInput( java.io.InputStrean) 0022.00 * // Creates a POI FileSystem object from a java input stream, 0023.00 * // required for reading exising xls files. 0024.00 D createPOIFSFileSystemForInput... 0025.00 D PR O EXTPROC(*JAVA: 0026.00 D 'org.apache.poi.poifs.filesystem- 0027.00 D .POIFSFileSystem': 0028.00 D *CONSTRUCTOR) 0029.00 D CLASS( *JAVA: 0030.00 D 'org.apache.poi.poifs.filesystem- 0031.00 D .POIFSFileSystem') 0032.00 D inputStream O CLASS(*JAVA: 0033.00 D 'java.io.InputStream') Sorry if this isn't enough info to be going on yet, I just wanted to get my problem "out there" as it's giving me a real headache. ps Apologies if this isn't the right forum or format for this as I've not posted before & I'm stuck with using Lotus Notes as my mail agent here at work (don't have a newsgroup reader either). Many thanks, David Hinselwood COMPUTACENTER (UK) LTD The contents of this e-mail are intended for the named addressee only. It contains information which may be confidential and which may also be privileged. Unless you are the named addressee (or authorised to receive for the addressee) you may not copy or use it, or disclose it to anyone else. If you received it in error please notify us immediately and then destroy it. Computacenter information is available from http://www.computacenter.com This footnote also confirms that this email message has been swept for the presence of computer viruses. ***************************************************************************************************************************
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.