JAVA-программа iSeries с интерфейсом RPGLE дает сбой при обработке изображений - PullRequest
0 голосов
/ 28 июня 2011

Я создал Java-программу, которая создает файлы PDF на основе GnuPdf.Он отлично работает, когда запускается с использованием собственного кода Java (в Windows или iSeries QSH), однако при запуске через интерфейс RPGLE программа падает (с случайными интервалами) при обработке изображений.Я разыскал один из них, чтобы загрузить изображение из файла .jar, и удалил вызов из кода.Некоторое время это работало, но теперь происходит сбой для изображений, загруженных из IFS.Может быть, RPGLE блокирует файлы как-то, а идеи?Код вызывается из служебной программы.

Вот трассировка стека

java.lang.NullPointerException
    at gnu.jpdf.PDFImage.write(PDFImage.java:286)
    at gnu.jpdf.PDFOutput.write(PDFOutput.java:114)
    at gnu.jpdf.PDFDocument.write(PDFDocument.java:307)
    at gnu.jpdf.PDFJob.end(PDFJob.java:182)
    at com.mysite.pdf.PdfDocumentStateValid.endDocument(PdfDocumentStateValid.java:657)
    at com.mysite.pdf.PdfDocument.endDocument(PdfDocument.java:36)
java.io.IOException: Descriptor not valid.
    at java.lang.Throwable.<init>(Throwable.java:196)
    at java.lang.Exception.<init>(Exception.java:41)
    at java.io.IOException.<init>(IOException.java:40)
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:260)
    at java.io.ByteArrayOutputStream.writeTo(ByteArrayOutputStream.java:112)
    at gnu.jpdf.PDFOutput.<init>(PDFOutput.java:96)
    at gnu.jpdf.PDFDocument.write(PDFDocument.java:302)
    at gnu.jpdf.PDFJob.end(PDFJob.java:182)
    at java.awt.PrintJob.finalize(PrintJob.java:60)
    at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:116)
    at java.lang.ref.Finalizer.access$100(Finalizer.java:47)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:193)

1 Ответ

0 голосов
/ 28 июня 2011

Изменение моего ответа здесь теперь, когда я могу видеть трассировку стека. Проблема возникает, когда вы нажимаете нативный код (нативный, то есть вы в основном углубляетесь в уровень ОС или пользовательский код ОС).

Вы получаете недопустимое IOException для дескриптора (и тем самым я предполагаю, что это означает дескриптор файла (т. Е. FileDescriptor). Теперь большая разница между запуском его в QShell и запуском из RPG заключается в том, что код Java Вызывается из RPG, вероятно, вызывается с другим ID и / или уровнем привилегий. Возможно, вам придется внести изменения в iSeries для вашей программы, чтобы предоставить ей полномочия для Java, чтобы иметь необходимые полномочия делать то, что ей нужно. (Я знаю, вы бы думаю, что это то, что SecurityManager в Java подхватил бы ... но я знаю, что странные вещи могут случаться иногда, когда вы используете пользовательскую JVM (читай IBM) в пользовательской ОС (i5 / OS). Вы оставлены на милость поставщика (в данном случае IBM). Сделайте это (вещь с разрешениями) и посмотрите, решит ли это вашу проблему.

Также ... Я гуглил и обнаружил, что это связано с iSeries: https://www -304.ibm.com / support / docview.wss? Uid = nas379538999e744aad1862575b0006e28ab Таким образом, может случиться так, что используемая ОС библиотека jt400 может иметь недостаток, и вам может понадобиться ее PTF и / или ваша JVM. Просто еще одна мысль о том, чтобы попробовать.

...