× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Matt,

wwPOIFS is defined: "like(POIFSFileSystem)" which is defined as
"CLASS(*JAVA
: 'org.apache.poi.poifs.filesystem.POIFSFileSystem')"

It is initialized to null, and the failing statement is attempting to
set it's value equal to new_POIFSFileSystem(wwFile).

wwFile evaluates to 11 in debug (below I said 8; it was actually wwStr
that is 8). I think wwFile points to wwStr, which points to the name of
my input file "(/John/HSSFTest.xls)".

new_POIFSFileSystem is defined thus: like(POIFSFileSystem)
extproc(*JAVA:'org.apache.poi.poifs.filesystem.POIFSFileSystem':*CONSTRU
CTOR).

I thought something might have been wrong with the input file, so I
created them using a variety of methods, from clientAccess Data Transfer
(output BIFF8), to SQL2XLS (which uses POI 2.5). I know better than to
create it using Excel, because I have Excel 2007 on my machine, and I
know POI can't handle those. I did try one that was created using Excel
2000, but no luck with that either.

POI 2.5 is installed in a separate directory from POI 3.0, so I don't
suppose there is a conflict. SQL2XLS sets the Classpath to point to the
directory where 2.5 is located, and I installed 3.0 in the QIBM location
so Classpath doesn't have to be set. I'm submitting my demo job, so the
JVM won't be started twice in the same job.

I also ran the demo program once with the name of an input file that
didn't exist, and it did return a "file not found" error, so I'm
inclined to think it is finding the current file, but just isn't able to
open it.

Thanks

Greg


|-----Original Message-----
|From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-
|bounces@xxxxxxxxxxxx] On Behalf Of Haas, Matt (CL Tech Sv)
|Sent: Friday, November 30, 2007 8:44 AM
|To: RPG programming on the AS400 / iSeries
|Subject: RE: Java error when updating existing Excel spreadsheets using
|HSSF
|
|Greg,
|
|How is wwPOIFS getting created? Is it null? How about
|newPOIFSFileSystem? I've never used POI from RPG (but I do use POI) but
|I do quite a bit of Java programming and any of these being null can
|cause a null pointer exception.
|
|Matt
|
|-----Original Message-----
|From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-
|bounces@xxxxxxxxxxxx] On Behalf Of Fleming, Greg (ED)
|Sent: Friday, November 30, 2007 8:14 AM
|To: RPG programming on the AS400 / iSeries
|Subject: RE: Java error when updating existing Excel spreadsheets using
|HSSF
|
|Scott,
|
|I guess what I'm looking for at this point is some direction on what I
|can do to find more detail.
|
|When I debug, I step through the upddemo program and step into the
|hssf_open() procedure,
|Then when I step into the "wwPOIFS = new_POIFSFileSystem(wwFile);"
|statement the program terminates.
|
|Is there a way to debug the Java program itself to see what's going on
|in more detail ?
|
|The wwFile variable doesn't appear to be null at the time (I think it
|showed up as 8 in debug), so I don't know what "null object" is being
|passed, nor to what "non-static method" it is being passed.
|
|As you can see, the job log isn't terribly informative, either.
|
|I don't reckon it was necessary, but just for craps and giggles I went
|ahead and ran the CRTVJVAPGM command on the POI 3.0.1. class (optimize
|40), but that didn't make any difference either.
|
|Thanks again for any direction or suggestions you can provide.
|
|And if you can't, then you can't. We have a really crappy workaround
we
|can implement if we can't get your code working. I understand there is
|only so much you can do without being here, and I seriously doubt I can
|get the boss to fly you down to South Florida. ;->
|
|Greg
|
||-----Original Message-----
||From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-
||bounces@xxxxxxxxxxxx] On Behalf Of Scott Klement
||Sent: Thursday, November 29, 2007 8:14 PM
||To: RPG programming on the AS400 / iSeries
||Subject: Re: Java error when updating existing Excel spreadsheets
using
||HSSF
||
||Hi Greg,
||
||Is there some way I can reproduce this error on my box? I'm really
||struggling to determine what, specifically, is going on.
||
||So I guess I'm saying that either you need to debug the code in detail
||to figure out what's going on, or you need to tell me how to reproduce
||the problem so I can debug the code in detail. Right now I just don't
||have any information about the problem other than "it doesn't work and
||the JVM crashes." Which is just a bit too broad for me to
||troubleshoot...
||
||
||
||
||Fleming, Greg (ED) wrote:
||> Scott,
||>
||> I downloaded your latest, installed the 3.0.1 POI, changed the
|upddemo
||> program to include the "if book = *null" code you mentioned below.
It
||> never gets to the "if" block, though, because the error occurs
inside
||of
||> the hssf_open procedure and the program terminates immediately.
||>
||> I still get the same error, but now it happens on the next line "
||> wwPOIFS = new_POIFSFileSystem(wwFile);" which seems odd, given that
||this
||> line is inside a monitor block. As soon as I step into the line,
||> program terminates.
||>
||> There aren't any messages prior to the JVM termination in the job
|log.
||> As you can see in this snippet, it goes straight from calling the
||> upddemo program to crashing:
||>
||> *NONE Request 11/29/07 13:23:23.598896
||> QWTSCSBJ *N QCMD QSYS 0189
||> Message . . . . : -CALL
||> PGM(UPDDEMO)
||> MCH74A5 Escape 40 11/29/07 13:23:30.047264
||> realcftrap2 001728 QJVAJNI QSYS *STMT
||> To module . . . . . . . . . :
||> QJVAJNI
||> To procedure . . . . . . . :
||> CallVoidMethodA
||> Statement . . . . . . . . . :
|1
||> Message . . . . : The Java
||> Virtual Machine has ended.
||> Cause . . . . . : Java
Virtual
||> Machine 1 has ended because of reason 2. The
||> reason codes are defined as
||> follows: 01- A Java program called the
||> java.lang.System.exit method
||with
||> a zero status code. 02- A Java program
||> called the
||java.lang.System.exit
||> method with a non zero status code of 134.
||>
||> Again as before, there is also a spooled file produced from the job
||> containing this text:
||> FATAL ERROR in native method: native code passed a null object to a
||> non-static method
||> java.lang.Throwable
||>
||> Anything else I can look at to find some kind of error messages
prior
||to
||> the inglorious death of the JVM ?
||>
||> Thanks again.
||>
||> Greg
||>
||>
||> |-----Original Message-----
||> |From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-
||> |bounces@xxxxxxxxxxxx] On Behalf Of Scott Klement
||> |Sent: Thursday, November 29, 2007 12:39 PM
||> |To: RPG programming on the AS400 / iSeries
||> |Subject: Re: Java error when updating existing Excel spreadsheets
||using
||> |HSSF
||> |
||> |Greg,
||> |
||> |You are using an outdated copy of HSSFR4. Please download and use
||the
||> |current one. I know that your copy is outdated because the
||> |FileInputStream vs FileOutputStream thing was corrected in Aug 2006
|-
||-
||> |more than a year ago.
||> |
||> |The most recent version can be found in the following article
||> |(Systeminetwork.com membership required, but a free "associate"
||> |membership will work):
||> |http://www.systeminetwork.com/article.cfm?id=55032
||> |
||> |Having said that, it's important to understand that RPG's O=Object
||data
||> |type aren't the actual Java objects. They're just REFERENCES to
the
||> |objects. Under the covers, they're just numbers -- and the numbers
||are
||> |used by the JVM to locate the actual object, which always resides
in
||> the
||> |JVM itself. So whether I coded FileInputStream or FileOutputStream
||> |doesn't really matter, as long as the number does actually refer to
|a
||> |FileInputStream object in the JVM. The reason that code made it
||into
||> |wide use is because it worked, despite being coded incorrectly,
||because
||> |it still referred to the right type of object.
||> |
||> |
||> |Regarding the "JVM ended, Reason code 2" error:
||> |
||> |That almost always happens when you pass a *NULL object to a Java
||> |routine. Like I said, RPG's O=Object data type is only a number
|that
||> |refers to a Java object. If you set that number to *NULL (which
||under
||> |the covers is zero) the JVM will be trying to refer to an object
|that
||> |doesn't exist, and that causes it to become confused and end
||> abnormally.
||> |
||> |Note that hssf_open() returns *NULL if it can't open the file.
Your
||> |code is SUPPOSED to check for that *NULL, and either try again, or
||end
||> |the program, or whatever it needs to do, when it encounters the
||*NULL.
||> |What it should NOT do is pass that *NULL object to another Java
||> routine.
||> | And I suspect that this is what it's doing.... it's not checking
||for
||> |the *NULL, and is proceeding as if everything is fine. And when
|Java
||> |gets that *NULL value, it crashes the JVM.
||> |
||> |So you can fix that by changing your code to something like this:
||> |
||> | book = HSSF_open('/path/to/whatever.xls');
||> | if (book = *null);
||> | *inlr = *on;
||> | return;
||> | endif;
||> |
||> |So... if the open failed, the program does not try to manipulate
the
||> |workbook (since it was never loaded), it just ends.
||> |
||> |That'll stop the JVM from crashing, but won't cause the HSSF_open()
||> |routine to load your spreadsheet. There should be earlier messages
||in
||> |the job log (earlier than that JVM ended thing) that explain why
the
||> |file didn't open...
||> |
||> |
||> |
||> |Fleming, Greg (ED) wrote:
||> |> Scott,
||> |>
||> |> Some further info may help us narrow this down.
||> |>
||> |> In debug, the error appears to occur in the HSSF_Open procedure
at
||> |line
||> |> 1559
||> |> wwFile = new_FileInputStream(wwStr);
||> |>
||> |> I had read on another list somewhere that the preceding
definition
||on
||> |> line 1553:
||> |> D wwFile s
like(jFileOutputStream)
||> |> Was in error and should be corrected to:
||> |> D wwFile s like(jFileInputStream)
||.
||> |>
||> |> I did this, recompiled the module and re-created the service
||program,
||> |> then rebound
||> |> The upddemo program. But I still get the same error either way.
||--
||This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
||list
||To post a message email: RPG400-L@xxxxxxxxxxxx
||To subscribe, unsubscribe, or change list options,
||visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
||or email: RPG400-L-request@xxxxxxxxxxxx
||Before posting, please take a moment to review the archives
||at http://archive.midrange.com/rpg400-l.
|
|
|--
|This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
|list
|To post a message email: RPG400-L@xxxxxxxxxxxx
|To subscribe, unsubscribe, or change list options,
|visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
|or email: RPG400-L-request@xxxxxxxxxxxx
|Before posting, please take a moment to review the archives
|at http://archive.midrange.com/rpg400-l.
|
|
|--
|This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
|list
|To post a message email: RPG400-L@xxxxxxxxxxxx
|To subscribe, unsubscribe, or change list options,
|visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
|or email: RPG400-L-request@xxxxxxxxxxxx
|Before posting, please take a moment to review the archives
|at http://archive.midrange.com/rpg400-l.



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

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.