Пунктуация в исходном коде Java заменена на акцентированные буквы при копировании в IFS

Я пытаюсь запустить программу RPGLE, которая использует методы Java. Я передаю код Java (файл xxxx.java) из моей системы (Windows XP) в каталог AS/400 IFS через FTP. После передачи в IFS файл CCSID отображается как 819.

Я компилирую файл.java в QSH, ошибки не отображаются. Но два файла классов генерируются. т.е.Mailer.javaMailer.class а также Mailer$1.class

Но когда я вызываю свою программу RPGLE, появляется исключение Java...

Java exception received when calling Java method (C G D F)... 
Application error.  RNX0301 unmonitored by MAILERDEMO at statement 000000500

Когда я увидел Mailer.java файл в IFS, нажав опцию 5, символы, такие как {, }, [, ], !, /, \ и т. д. изменены на некоторые другие символы.

Поэтому, пожалуйста, предложите мне некоторые решения для этого, чтобы я мог запустить эту программу. Как перенести файл.java в IFS, не меняя символы на другие?

Вот некоторые подробности.....

Значение CCSID системы - 819

Работа CCSID - 273

Мой исходный код Java в каталоге IFS:

// Load Properties File                                                        
if (is |= null) ä                                                              
    try ä                                                                      
        properties = new Properties();                                         
        properties.load(is);                                                   
    ü                                                                          
    catch (Exception e) ä                                                      
        System.err.println("Error " + "Ö"" + e.getLocalizedMessage()           
            + "Ö"" + " loading AS/400 Connection Properties.");                
        throw new RuntimeException(e);                                         
    ü                                                                          
ü                                                                              

// Assume properties passed as system properties                               
else ä                                                                         
    properties = System.getProperties();                                       
ü                                                                              

Исключение Java показано при запуске программы RPGLE:

Message ID . . . . . . :   RNQ0301       Severity . . . . . . . :   99         
Message type . . . . . :   Inquiry                                             
Date sent  . . . . . . :   12/30/10      Time sent  . . . . . . :   11:31:57   

Message . . . . :   Java exception received when calling Java method (C G D    
  F).                                                                          
Cause . . . . . :   RPG procedure MAILERDEMO in program SAHOON1/MAILERDEMO     
  received Java exception "java.lang.NoSuchMethodError: sendSimpleMail" when   
  calling method "sendSimpleMail" with signature                               
  "(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;)L 
  java.lang.String;" in class "demo.Mailer".                                   
Recovery  . . . :   Contact the person responsible for program maintenance to  
  determine the cause of the problem.                                          
Possible choices for replying to message . . . . . . . . . . . . . . . :       
  D -- Obtain RPG formatted dump.                                              
                                                                       More... 

2 ответа

Решение

Если вы можете скомпилировать ваш исходный код с помощью javac в QSH, тогда сам исходный код Java был передан таким образом, чтобы сделать его приемлемым для javac (который не выполняет преобразование кодовой страницы и ожидает, что прочитанные байты будут в 819). Mailer$1.class происходит от анонимного класса в Mailer (новый FooBar() с {}-блоком впоследствии).

То, что это выглядит неверно для вас, я бы тогда ожидал, потому что система AS/400, скорее всего, не согласуется с вашим эмулятором 5250 по используемым наборам символов, и я бы не стал беспокоиться (пока работает javac).

Ваше сообщение об ошибке указывает на то, что существует несоответствие между заголовком RPG, описывающим, какой метод Java вы хотите вызвать, и тем, который на самом деле существует. Мне кажется, что вы хотите вызвать "demo.Mailer.sendSimpleMail(String, String, String, String)", который должен возвращать строку, а у вас нет такого метода.

IMO, нет никаких причин для компиляции кода на iSeries ... разработка, тестирование и сборка кода на рабочей станции... затем развертывание и тестирование jar-приложения на хосте.

Другие вопросы по тегам