[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2003
    Beiträge
    12

    Java Programm aus ILE RPG aufrufen

    Hallo,

    ich habe folgendes Problem:

    Habe ein ILE RPG Programm geschrieben, welches einen Java XML Parser mit dem Dateipfad als Parameter aufruft.
    Das Java Programm liest das XML Dokument in ein Array ein und soll es dem ILE RPG Programm zurückliefern, damit ich den Inhalt weiterverarbeiten kann.
    Mein Problem daran ist wie definiere ich den Prototypen für das Java Programm(wegen Array) und wie ist dann der Aufruf?
    Habe schon verzweifelt in Dokus gesucht aber nichts gefunden.

    Könnte mir jemand weiterhelfen?? oder ein Beispiel Posten??

    Vielen Dank

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    sowas mache ich zwar nicht, Java aus RPG über JNI aufrufen und rate auch davon ab, aber das mit dem Array, das wird wohl nix werden, das müsste ja in dem RPG dann dynamisch deklariert und verwaltet werden und ob das geht, das bezweifel ich eher.
    Das müsste man wohl über eine Objekt Deklaration und weiter Aufrufe machen; aber was soll das ganze eigentlich? Damit bist du doch genauso weit wie vorher und das zerlegen in Zeilen kriegt man eher in RPG hin, als das analysieren des XML. Was hast du denn wirklich vor?

    mfg

    Dieter Bender

    Zitat Zitat von PGMR
    Hallo,

    ich habe folgendes Problem:

    Habe ein ILE RPG Programm geschrieben, welches einen Java XML Parser mit dem Dateipfad als Parameter aufruft.
    Das Java Programm liest das XML Dokument in ein Array ein und soll es dem ILE RPG Programm zurückliefern, damit ich den Inhalt weiterverarbeiten kann.
    Mein Problem daran ist wie definiere ich den Prototypen für das Java Programm(wegen Array) und wie ist dann der Aufruf?
    Habe schon verzweifelt in Dokus gesucht aber nichts gefunden.

    Könnte mir jemand weiterhelfen?? oder ein Beispiel Posten??

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

  3. #3
    Registriert seit
    Oct 2003
    Beiträge
    12
    Zitat Zitat von BenderD
    Hallo,

    sowas mache ich zwar nicht, Java aus RPG über JNI aufrufen und rate auch davon ab, aber das mit dem Array, das wird wohl nix werden, das müsste ja in dem RPG dann dynamisch deklariert und verwaltet werden und ob das geht, das bezweifel ich eher.
    Das müsste man wohl über eine Objekt Deklaration und weiter Aufrufe machen; aber was soll das ganze eigentlich? Damit bist du doch genauso weit wie vorher und das zerlegen in Zeilen kriegt man eher in RPG hin, als das analysieren des XML. Was hast du denn wirklich vor?

    mfg

    Dieter Bender


    Hallo,

    eigentlich habe ich nichts weiter vor als ne XML Datei aus dem IFS einzulesen.
    Problem ist das in der ankommende XML-Datei- die Tags so gestaltet sind, dass die alle in einer Zeile stehen und für CPYTOSTMF die Zeile zu lang ist.
    Hättest du noch ne andere Idee?

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    Zitat Zitat von PGMR
    Hallo,

    eigentlich habe ich nichts weiter vor als ne XML Datei aus dem IFS einzulesen.
    Problem ist das in der ankommende XML-Datei- die Tags so gestaltet sind, dass die alle in einer Zeile stehen und für CPYTOSTMF die Zeile zu lang ist.
    Hättest du noch ne andere Idee?
    nein, mehrere:
    - was hältst du von CPYFRMSTMF ENDLINFMT(*FIXED)
    - oder von lesen des Streamfiles mit C-Apis aus RPG (dazu gabs letztes Jahr Artikel von mir im Midrange Magazin und gibt es Service Programme auf meiner Open Source Seite und bei Thomas auf der tools400 ebenso)
    - wie wärs mit dem XML Parser API (siehe ebenfalls bei Thomas Raddatz)
    - ...
    allerdings würde ich auch mal drüber nachdenken, was passiert, wenn das XML irgendwo Schrott ist!!!

    mfg

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

  5. #5
    Registriert seit
    Dec 2003
    Beiträge
    106
    Hallo PGMR,

    kann Hr. Bender nur zustimmen.
    versuchs mal mit den C-APIs, funktioniert wunderbar.

    Bei uns läuft in bestimmten Bereichen der Datenaustausch
    auch per XML Dateien. Das einlesen bzw ausgeben ist
    mit den C APIs kein Problem.

    Und schon ist die Mietze am fliegen.
    (ups, war ja ein Spruch von nem JAVA Dozenten)

  6. #6
    Registriert seit
    Oct 2003
    Beiträge
    12
    Zitat Zitat von sim
    Hallo PGMR,

    kann Hr. Bender nur zustimmen.
    versuchs mal mit den C-APIs, funktioniert wunderbar.

    Bei uns läuft in bestimmten Bereichen der Datenaustausch
    auch per XML Dateien. Das einlesen bzw ausgeben ist
    mit den C APIs kein Problem.

    Und schon ist die Mietze am fliegen.
    (ups, war ja ein Spruch von nem JAVA Dozenten)



    Mit den C APIs habe ich es auch schon probiert, hat auch funktioniert bin leider nach längerem Experimentieren daran gescheitert, das sie Umlaute nicht umgesetzt werden(auch wenn ich CCSID angebe.

    Ich werde mich mal mit den Service Programmen von tools400 beschäftigen...

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hi,

    poste mal deine Parameter vom open, irgendwas machst du da verkehrt

    Dieter Bender

    Zitat Zitat von PGMR
    Mit den C APIs habe ich es auch schon probiert, hat auch funktioniert bin leider nach längerem Experimentieren daran gescheitert, das sie Umlaute nicht umgesetzt werden(auch wenn ich CCSID angebe.

    Ich werde mich mal mit den Service Programmen von tools400 beschäftigen...
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Oct 2003
    Beiträge
    12
    Zitat Zitat von BenderD
    Hi,

    poste mal deine Parameter vom open, irgendwas machst du da verkehrt

    Dieter Bender

    p readFile b export

    d readFile pi 256 dim(9999)
    d pFileName 100a

    * //Work Variables
    d BytesRead s 10i 0 inz(1)
    d File s 100
    d FileOpen s 10i 0
    d DataRead s 32767a
    d Data s 32767a
    d Eor s 2a inz(X'0D25')
    d PosStart s 5 0 inz(1)
    d PosEnd s 5 0 inz(1)
    d PosDiff s 5 0

    d ayReadResult s 256 dim(9999)
    d ayReadI s 5 0 inz(0)

    d ofl s 10i 0
    d mode s 10u 0
    d codep s 10u 0

    * //Open File! If error, FileOpen return '-1'
    c eval File = %trim(pFileName) + x'00'
    c eval ofl=O_RDONLY+O_TEXTDATA
    c eval mode = S_IRUSR
    c eval codep = 273
    c eval FileOpen = open(%add
    (Filepenflags
    c :mode:codepage)
    c eval FileOpen = open(%addr(File)fl)

    * //Bei Fehler leeres Array zurückliefern
    c if FileOpen < 0
    c eval ayReadI = (ayReadI + 1)
    c eval ayReadResult(ayReadI) = *blank
    c return ayReadResult(ayReadI)
    c endif

    c dow BytesRead > 0

    * //Read file and save in buffer DataRead
    c eval BytesRead = read(FileOpen
    c : %addr(DataRead)
    c : %size(DataRead))
    c if BytesRead > 0

    * //Read from first blank till second blank and save the diff in Array
    c dou PosEnd = *zero
    c if %scan(EorataRead:PosStart) = PosStart
    c eval PosStart = (PosStart + 1)
    c endif
    c eval PosEnd = %scan(EorataRead:PosStart)
    c if PosEnd <= 0
    c leave
    c endif
    c eval ayReadI = (ayReadI + 1)
    c eval PosDiff = (PosEnd - PosStart)
    c eval ayReadResult(ayReadI) = %subst

    (DataRead
    c : PosStart: PosDiff)
    c eval PosStart = PosEnd
    c enddo
    c endif

    c enddo

    * //Close the File
    c callp close(FileOpen)

    c return ayReadResult

    preadFile e

    Kannst du den Fehler erkennen??

  9. #9
    Registriert seit
    Dec 2003
    Beiträge
    106
    Zitat Zitat von PGMR
    Mit den C APIs habe ich es auch schon probiert, hat auch funktioniert bin leider nach längerem Experimentieren daran gescheitert, das sie Umlaute nicht umgesetzt werden(auch wenn ich CCSID angebe.

    Ich werde mich mal mit den Service Programmen von tools400 beschäftigen...

    Hallo PGMR,

    hier hab ich mal ein kleines Beispiel wie du die Umsetzung machen kannst. Wie gesagt, wir machen auch XML Ein und Ausgabe und es funktioniert ohne Probleme.

    // Von EBCEDIC nach ANSI (Windows) umwandeln
    // ohne Euro Zeichen
    ...
    ...
    when zeichensatz = 'EbAn';
    UmgesetzteDaten =
    qdcxlate (anzBytes : daten : 'Q273A05A5U' : 'QUSRSYS' );

    // Euro Zeichen umsetzen
    daten = %xlate(x'C7':x'80':daten);
    ...
    ...


    sim

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,


    Zitat Zitat von PGMR
    * //Open File! If error, FileOpen return '-1'
    c eval File = %trim(pFileName) + x'00'
    c eval ofl=O_RDONLY+O_TEXTDATA
    c eval mode = S_IRUSR
    c eval codep = 273
    c eval FileOpen = open(%add
    (Filepenflags
    c :mode:codepage)
    c eval FileOpen = open(%addr(File)fl)

    Kannst du den Fehler erkennen??
    der erste open sollte klappen, der zweite geht wohl in den Wind, weil das File schon open ist (denke ich mir), wenn die CCSID der Datei korrekt ist, dann wird ohne Angabe geöffnet, was bei Textdata automatisch konvertiert.
    Mit anderen Worten: prüfe ob der Inhalt der Konstanten O_RDONLY und O_TXTDATA richtig ist und lass den ersten open weg.

    mfg

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

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Das kann der read bereits selber, da ist wahrscheinlich auch der open verkehrt. Beim erstellen kann es noch sein, dass die korrekte CCSID vergeben werden muss, wenn da gemapte Laufwerke im Spiel sind. Die CCSID für Windows sollte hier irgendwo im AS400 Forum zu finden sein.

    mfg

    Dieter Bender

    Zitat Zitat von sim
    Hallo PGMR,

    hier hab ich mal ein kleines Beispiel wie du die Umsetzung machen kannst. Wie gesagt, wir machen auch XML Ein und Ausgabe und es funktioniert ohne Probleme.

    // Von EBCEDIC nach ANSI (Windows) umwandeln
    // ohne Euro Zeichen
    ...
    ...
    when zeichensatz = 'EbAn';
    UmgesetzteDaten =
    qdcxlate (anzBytes : daten : 'Q273A05A5U' : 'QUSRSYS' );

    // Euro Zeichen umsetzen
    daten = %xlate(x'C7':x'80':daten);
    ...
    ...


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

Similar Threads

  1. RPG aus Java aufrufen
    By Vicky-B in forum NEWSboard Java
    Antworten: 17
    Letzter Beitrag: 06-05-08, 11:05
  2. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  3. ILE RPG aus Stored Procdure aufrufen
    By pfpk0997 in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 15-11-06, 09:40
  4. Java Programm aus ILE RPG aufrufen
    By PGMR in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 02-02-05, 13:10
  5. Umwandeln ILE RPG Programm
    By alex in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 06-08-02, 07:13

Berechtigungen

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