-
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
-
Wie immer:
Die Daten sollten die CCSID haben die sie repräsentieren, also CHGMSGF ... CCSID(nnn).
-
 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
-
Da Java doch Unicode unterstützt, versuche doch die Nachrichten in UNICODE (CCSID 13488) zu konvertieren, dann dürfte es keine Verluste geben.
-
 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,
-
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 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
-
 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
-
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 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
-
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.
-
 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
-
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.
-
 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
-
By Nils_V in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 18-07-16, 09:49
-
By mk in forum NEWSboard Java
Antworten: 4
Letzter Beitrag: 11-12-06, 08:51
-
By ratinger in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 18-08-06, 11:22
-
By agutenbru in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 05-04-06, 10:11
-
By mott in forum IBM i Hauptforum
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks