[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Sep 2004
    Beiträge
    16

    Question Mittels Java-Toolbox auf MessageFiles zugreifen

    Hallo !

    Ich brauche in einer Java-Klasse Nachrichten aus verschiedenen MessageFiles. Dazu verwende ich die Java-Toolbox (com.ibm.as400.access.MessageFile und com.ibm.as400.access.AS400Message.getText).

    Nun habe ich das Problem, das wir unsere MSGF mit CCSID 65535 erstellt haben und die Texte pro MSGF in unterschiedlichen CCSID's gespeicht sind. Das funktioniert auf der iSeries ganz gut, macht jedoch in Java bei manchen CCSID's Probleme. Bei CCSID 1025 bekomme ich nur Sonderzeichen zurück. In Java habe ich bisher jedoch keine Möglkichkeit gefunden die richtige CCSID anzugeben oder zumindest ein Byte-Array zurückzubekommen, das dann umgewandelt werden kann.

    Hat vielleicht irgend jemand eine Idee wie ich dieses Problem lösen kann?

    mfg, Opeker

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Wie immer:
    Die Daten sollten die CCSID haben die sie repräsentieren, also CHGMSGF ... CCSID(nnn).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Sep 2004
    Beiträge
    16
    Zitat Zitat von Fuerchau
    Wie immer:
    Die Daten sollten die CCSID haben die sie repräsentieren, also CHGMSGF ... CCSID(nnn).
    Vielen Dank für die Antwort. Ich habe damit jedoch zwei Probleme. Das größte ist sicherlich, das auf der iSeries alle Bildschirm- und Druckausgaben mit diesen Einstellungen richtig funktionieren und der Umstellungsaufwand wahrscheinlich etwas größer ist als ein CHGMSGF. Das zweite Problem ist, das bei einer Umstellung der CCSID die Text auch nicht in Kyrillisch angezeigt werden, sondern irgendwie ins Latin übersetzt werden (z.Bsp statt Обозначение wird Oboznacenie angezeigt).

    Ich bräuchte daher wahrscheinlich eine Lösung (Konvertierung) in Java.

    mfg, Opeker

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Da Java doch Unicode unterstützt, versuche doch die Nachrichten in UNICODE (CCSID 13488) zu konvertieren, dann dürfte es keine Verluste geben.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Sep 2004
    Beiträge
    16
    Zitat Zitat von Fuerchau
    Da Java doch Unicode unterstützt, versuche doch die Nachrichten in UNICODE (CCSID 13488) zu konvertieren, dann dürfte es keine Verluste geben.
    Das war auch meine Idee. Ich habe jedoch in der Java-Toolbox keine Möglichkeit gefunden bei MessageFile oder AS400Message etwas zu konvertieren. Ich weiss daher nicht wie ich die Nachrichten konvertieren kann.

    lg,

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    ich verstehe als interessierter Laie (der noch nie ein AS400 Object erstellt hat) die Frage noch nicht ganz: das AS400 Object hat eine CCSID, Java verwendet UniCode und ich gehe davon aus, dass da passend konvertiert wird. Was treibst du genau und was funktioniert nicht?

    mfg

    Dieter Bender

    Zitat Zitat von opeker
    Hallo !

    Ich brauche in einer Java-Klasse Nachrichten aus verschiedenen MessageFiles. Dazu verwende ich die Java-Toolbox (com.ibm.as400.access.MessageFile und com.ibm.as400.access.AS400Message.getText).

    Nun habe ich das Problem, das wir unsere MSGF mit CCSID 65535 erstellt haben und die Texte pro MSGF in unterschiedlichen CCSID's gespeicht sind. Das funktioniert auf der iSeries ganz gut, macht jedoch in Java bei manchen CCSID's Probleme. Bei CCSID 1025 bekomme ich nur Sonderzeichen zurück. In Java habe ich bisher jedoch keine Möglkichkeit gefunden die richtige CCSID anzugeben oder zumindest ein Byte-Array zurückzubekommen, das dann umgewandelt werden kann.

    Hat vielleicht irgend jemand eine Idee wie ich dieses Problem lösen kann?

    mfg, Opeker
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Sep 2004
    Beiträge
    16
    Zitat Zitat von BenderD
    Hallo,

    ich verstehe als interessierter Laie (der noch nie ein AS400 Object erstellt hat) die Frage noch nicht ganz: das AS400 Object hat eine CCSID, Java verwendet UniCode und ich gehe davon aus, dass da passend konvertiert wird. Was treibst du genau und was funktioniert nicht?

    mfg

    Dieter Bender
    Guten Morgen !

    Mittels dieser Java-Objekte kann ich auf Daten der iSeries zugreifen. In diesem Falle auf Objekte der Art *MSGF. Dabei habe ich allerdings das Problem, dass die iSeries-Objekte in SingleByte gespeichert sind und Java mit Unicode arbeitet. Daher wird irgendwo (leider falsch) umgesetzt. In diesem Fall bin ich zwar schlauer als die Automatik, da ich die richtigen CCSID's kenne, aber es hilft mir nichts, weil ich nicht weiß wo ich in diese Automatik eingreifen kann. Ein Byte-Array könnte ich zwar richtig konvertieren, aber aus diesen Java-Objekten bekomme ich keine zurück.

    lg,

    Peter Opeker

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    ich gehe davon aus, dass ein Message File eine CCSID hat, die Connection (sprich: das AS400 Objekt) hat ebenfalls eine und beim holen findet dann eine (gegebenen Falls doppelte) Umsetzung statt. Von der CCSID der Message File über die CCSID des AS400 Objektes zu Unicode und wenn du hier alles richtig einstellst sollte das Ergebnis stimmen, oder die Toolbox hat einen Bug, oder in deinem Message File steht Schrott.
    Was das Byte Array angeht: diese Frage kann doch nicht ernst gemeint sein???. die getText() des MessageFiles liefert dir einen String zurück und selbiger hat wie jeder String eine Methode getBytes() die dir ein Byte Array zurück liefert. Allerdings käme kein Java Programmierer auf die RPG Idee irgendwelche Bit Frickeleien in einem Byte Array vorzunehmen, um einen Work around für einen Bug oder Schrottdaten zu drechseln.

    mfg

    Dieter Bender

    Zitat Zitat von opeker
    Guten Morgen !

    Mittels dieser Java-Objekte kann ich auf Daten der iSeries zugreifen. In diesem Falle auf Objekte der Art *MSGF. Dabei habe ich allerdings das Problem, dass die iSeries-Objekte in SingleByte gespeichert sind und Java mit Unicode arbeitet. Daher wird irgendwo (leider falsch) umgesetzt. In diesem Fall bin ich zwar schlauer als die Automatik, da ich die richtigen CCSID's kenne, aber es hilft mir nichts, weil ich nicht weiß wo ich in diese Automatik eingreifen kann. Ein Byte-Array könnte ich zwar richtig konvertieren, aber aus diesen Java-Objekten bekomme ich keine zurück.

    lg,

    Peter Opeker
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Das Problem liegt wohl eher in der Jobumgebung. Auch der Java-Job läuft unter einer CCSID !
    Beim Zugriff auf die Nachricht wird also VOR Java der Inhalt in die JobCCSID konvertiert und dann an Java übergeben (die Toolbox muss schliesslich intern den RTVMSG bzw. das API aufrufen).
    Dadurch erhalten die gelesenen Daten die CCSID des Jobs und werden dann natürlich "falsch" in Unicode übersetzt.
    Prüfe mal, in wie weit beim Lesen der Job kurzfristig in die CCSID der Nachricht geändert werden kann. Eine Änderung auf 65535 bringt nichts, da dann eine Standardzuordnung zum Unicode (wahrscheinlich CCSID 037) angenommen wird.
    Wie du die CCSID der Nachricht in Java abfragen kannst weiß ich nicht.
    Ggf. musst du ein Programm (CLP/RPGLE) schreiben, dass über Java aufgerufen wird und den Zugriff auf die Nachricht selbst übernimmt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Sep 2004
    Beiträge
    16
    Zitat Zitat von BenderD
    Hallo,

    ich gehe davon aus, dass ein Message File eine CCSID hat, die Connection (sprich: das AS400 Objekt) hat ebenfalls eine und beim holen findet dann eine (gegebenen Falls doppelte) Umsetzung statt. Von der CCSID der Message File über die CCSID des AS400 Objektes zu Unicode und wenn du hier alles richtig einstellst sollte das Ergebnis stimmen, oder die Toolbox hat einen Bug, oder in deinem Message File steht Schrott.
    Was das Byte Array angeht: diese Frage kann doch nicht ernst gemeint sein???. die getText() des MessageFiles liefert dir einen String zurück und selbiger hat wie jeder String eine Methode getBytes() die dir ein Byte Array zurück liefert. Allerdings käme kein Java Programmierer auf die RPG Idee irgendwelche Bit Frickeleien in einem Byte Array vorzunehmen, um einen Work around für einen Bug oder Schrottdaten zu drechseln.

    mfg


    Dieter Bender
    Ich habe wie oben schon beschrieben das Problem das der MSGF mit CCSID 65535 und die Texte darin in den Spracheigenen CCSID's gespeichert sind. Also z.Bsp. 37, 870 oder 1025. Das ist leider auf die Schnelle nicht zu ändern da auf der iSeries sämtliche Ausgaben korrekt dargestellt werden und diese Lösung international auf meherern System zur Anwendung kommt. Ich brauche nun in der Java-Welt die gleichen Texte, habe dabei das Problem das 1025-Texte nur als Sonderzeichen in Java ankommen.

    Klar kann ich aus einem String ein Byte-Array machen, doch da ist die falsche Umsetzung bereits passiert und es hilft mir nichts mehr. Ich bräuchte einen Einstieg eine Ebene tiefer.

    mfg

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Schau dir mal den Befehl RTVMSG, F10 zusätzliche Parameter an.
    Im Default für CCSID steht *JOB, das heißt, dass die Nachricht eben in die Jobccsid geändert wird. Das glieche gilt auch für das API.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Sep 2004
    Beiträge
    16
    Zitat Zitat von Fuerchau
    Schau dir mal den Befehl RTVMSG, F10 zusätzliche Parameter an.
    Im Default für CCSID steht *JOB, das heißt, dass die Nachricht eben in die Jobccsid geändert wird. Das glieche gilt auch für das API.
    Vielen Dank für den Tipp. Werde weiter nach einer Lösung suchen und ggf. dann hier posten. Das mit der Job-CCSID habe ich schon mit wenig Erfolg probiert. Ich habe dazu mit CommandCall die richtige CCSID eingestellt. War aber eher nur ein Versuch, da ein Serverjob ja auch für eine andere Anwendung herangezogen werdan kann und dann zu nicht gewünschten Effekten führen kann.

    lg,

Similar Threads

  1. Antworten: 11
    Letzter Beitrag: 18-07-16, 09:49
  2. Starten Java auf dem PC
    By mk in forum NEWSboard Java
    Antworten: 4
    Letzter Beitrag: 11-12-06, 08:51
  3. Antworten: 0
    Letzter Beitrag: 18-08-06, 11:22
  4. Datentransfer DB2/400 <---> Oracle mittels JAVA
    By agutenbru in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 05-04-06, 10:11
  5. Antworten: 0
    Letzter Beitrag: 14-06-05, 14:44

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •