richard: Direkter Zugriff auf MSXML DOM2 Objekt unter Java möglich?

Hallo Leute!
Erstmal Danke an Matze, mein Problem vom letzten Mal ist gelöst. (habe das ! beim return von isLeaf) vergessen.

Jetzt gehts aber weiter: Ich erzeuge unter Javascript ein DOM Objekt.
Dieses wird in einen String umgewandelt, als Parameter übergeben, vom Java Applet als String-Parameter geladen, wieder in ein DOM Objekt gewandelt und dann geparsed.
Meine Frage nun:
Gibt es eine Möglichkeit, das unter JS erzeugte DOM Objekt an Java zu übergeben und anschliessend dort auch zu parsen?

Ich danke euch recht herzlich,
Richard

  1. Hallo Richard,

    ich weiss nicht zu was das JS-DOM Object beim umwandeln wird. Aber am besten wäre es sicher, wenn Du daraus irgendwie gültiges XML machst, das übergibst, und dann auf der Serverseite parst. Das müsste in jedem Fall gehen.

    Gruss

    Marko

    1. Hallo Marko!

      Also, generell geht es bei dem ganzen Projekt um folgendes Problem:
      Ich habe eine XML Datei die ich mittels eines Java Treecontrols als Tree darstellen will.
      Da es sich im Projekt um eine (nicht änderbare) Struktur handelt, bei der ich vom Client aus auf diese XML Datei zugreiffen kann, vom Server aber nicht, wird mittels Javascript die XML Datei geladen (in das bereits genannte DOM Objekt unter JavaScript. Hier wird auch validiert (wobei dies immer positiv verläuft, da die XML Datei maschinell erzeugt wird).
      Um jetzt diese Datei allerdings als Tree darstellen zu können, will ich Java verwenden (mit einem eigenen Applet).
      Ich weiss, dass es dafür bereits fertige Applets gibt, aber diese sind für mich unbrauchbar, da die XML Datei sehr gross sein kann und die vorhandenen Applets dann einfach zu langsam sind, da sie meist ein Setzen des Contents Baumknotenweise verlangen.
      Somit kommt wieder die Frage - wie bekomme ich mit möglichst wenig Zwischenschritten die XML Datei von der Clientseite auf den Server in eine Java DOM Variable (ich verwende XALAN auf dem Server)?
      Wie gesagt, das Weg
      Javascript-->MSXMLDOM2-->in String verwandeln-->als Parameter an Javaapplet schicken-->im Applet von String wieder in DOM Objekt laden-->in Tree verwandeln
      Ist mir bereits klar, aber ich frage mich, ob das nicht eleganter geht.

      Danke,
      Richard

      1. Deutsch ist halt schwer..

        Wie gesagt, das Weg

        natürlich der Weg

        ;) Richard

      2. Hallo Richard,

        so ganz hab ich es noch nicht verstanden, aber irgendwie scheint mir das auch recht kompliziert zu sein, was Du vorhast. Bist Du Dir  überhaupt sicher, dass Clientseitig alles zur Verfügung steht was Du brauchst ? Geht es um eine Intra- (will heißen ,Du weisst was der Client installiert hat) oder Internet Lösung ? Im Internet darauf zu setzen, dass eine aktuelle JVM installiert ist kannst Du eigentlich vergessen, leider (ich finde Java-Applets eine geniale Sache, halte sie aber leider heutzutage nicht wirklich für allgemein einsetzbar, dank Microsoft).

        »» auf diese XML Datei zugreiffen kann, vom Server aber nicht, wird mittels Javascript die XML Datei geladen (in das bereits genannte DOM Objekt unter JavaScript. Hier wird auch validiert (wobei dies immer positiv verläuft, da die XML Datei maschinell erzeugt wird).

        Wieso kann der Server nicht auf die Datei zugreifen ? Liegt sie auf dem Client ? Wäre vielleicht einfach ein HTTP-Upload überlegenswert.

        Somit kommt wieder die Frage - wie bekomme ich mit möglichst wenig Zwischenschritten die XML Datei von der Clientseite auf den Server in eine Java DOM Variable (ich verwende XALAN auf dem Server)?

        Was bringt Dir der Xalan auf dem Server, wenn die XML Datei auf dem Client dargestellt werden soll ?

        Gruss

        Marko

        1. Hallo Marko!

          Au backe, Montag morgen... schon mal Sorry, aber ich hab mich heute da ein bissel vertan...-ich hoffe, dass man mir trotzdem noch glaubt, wenn ich sag, ich weiss was Client und Server sind...

          »»Geht es um eine Intra- (will heißen ,Du weisst was der Client installiert hat) oder Internet Lösung ?
          A: Intranet, Client bekannt und kann angepasst werden.

          Wieso kann der Server nicht auf die Datei zugreifen ? Liegt sie auf dem Client ? Wäre vielleicht einfach ein HTTP-Upload überlegenswert.

          A: Sorry, mein Denkfehler--Ich habe die Ausführung des Applets auf den Server verlegt.... aber klarerweise findet die Ausführung des Applets auf dem Client statt (sonst wärs ja ein Servlet ;) ) und ja, die Datei liegt auf dem Client.

          Was bringt Dir der Xalan auf dem Server, wenn die XML Datei auf dem Client dargestellt werden soll ?

          A: Gute Frage ;) aber siehe 2), XALAN liegt natürlich demnach auch auf dem Client.

          Aber nun nochmal: wie bekomme ich mit möglichst wenig Zwischenschritten die XML Datei in eine Java DOM Variable, also ins Applet?
          Nach dem mir bekannten Sicherheitsmechanismus von Java Applets ist ein direktes Laden dieser Datei nämlich nicht möglich)...

          Danke,
          Richard

          1. Hallo Richard,

            Nach dem mir bekannten Sicherheitsmechanismus von Java Applets ist ein direktes Laden dieser Datei nämlich nicht möglich)...

            O.K. jetzt ist es klarer. Ich kenne mich mit den Möglichkeiten der aktuellen Java Versionen nicht so genau aus, ich weiss nicht, ob Du mittlerweile irgendwie auf das Dateisystem des Clients, oder auf Javascript zugreifen kannst. Mit der 1.1 er Version ging es nicht.
            Dass Du aus einem Applet irgendwie direkt auf eine MSXML Variable zugreifen kannst halte ich für extrem unwahrscheinlich.
            Ein recht einfacher Weg, der mir einfallen würde, ist der mit dem HTTP Upload. Du lässt den Benutzer mit einem HTTP-Upload Formular die Datei auf den Server laden (ohne Java-Script, und ohne Clientseitig irgendwas mit der Datei zu machen). Das Java Applet holt sich dann die Datei über eine URL Connection. Auf dem Server brauchst Du nur ein kleines Servlet, oder ein Script (z.B. PHP), das die Datei entgegennimmt.

            Gruss

            Marko

            1. Hallo Marko!
              Ich danke Dir für Deinen Tip!
              (Das ist jetzt dann die Krönung: Bisher Javascript & CGIs , jetzt neu Java und PHP, bald hab ich alle Techniken...)

              Richard

      3. Hallo Marko,

        Du kannst von JS aus direkt öffentliche Methoden des Javaapplets aufrufen, wenn Du beim Applettag noch mayscript="mayscript" angibst.
        (Ich weiß nicht, ob der IE das überhaupt braucht, aber bei NN4 war das mal so)
        Damit kannst Du dem Applett jedes JS-Objekt übergeben. Wenn Du dann gleich mit MSXML geparst hast, kannst Du Dir die Verwendung von Xalan auch schenken.
        Du solltest allerdings an jede Datei, an die Du mit JS ran kommst auch mit Java ran kommen können. Von daher kannst Du die Datei vermutlich auch gleich im Applett einlesen und erreichst damit etwas mehr Unabhängigkeit vom Browser

        Grüße

        Daniel

        1. Hallo Daniel,

          Du kannst von JS aus direkt öffentliche Methoden des Javaapplets aufrufen, wenn Du beim Applettag noch mayscript="mayscript" angibst.

          seit welcher Version geht das denn ?

          (Ich weiß nicht, ob der IE das überhaupt braucht, aber bei NN4 war das mal so)
          Damit kannst Du dem Applett jedes JS-Objekt übergeben. Wenn Du dann gleich mit MSXML

          Man kann aber keine MSXML Objekte übergeben, oder ? Ich meine, woher soll Java denn die Klasse für das Objekt kennen ? Sind doch ganz verschiedene Programmiersprachen, oder geht das etwa mit der Microsoft Java Version ?

          Gruss

          Marko

          1. Hallo Marko,

            seit welcher Version geht das denn ?

            Mit NN3 und IE3/4 und Java 1.1 ging das schon.

            Man kann aber keine MSXML Objekte übergeben, oder?

            Man kann JS Objekte übergeben. Wenn Du das Objekt mit JS benutzen kannst, kannst Du es auch mit Java. Was da dann dahintersteckt ist egal.

            Ich meine, woher soll Java denn die Klasse für das Objekt kennen ? »» Sind doch ganz verschiedene Programmiersprachen, oder geht das etwa mit der Microsoft Java Version ?

            Nun, für Java ist das einfach eine Instanz von netscape.javascript.JSObject, d.h. Java weiß zwar nicht, was das genau das, was Du da übergibst, ist und wo es herkommt, aber es kann damit arbeiten. Du rufst die Methoden es Objekts auch anders auf. Mit object.call("methode", new String[] {"argumente","argumente"}) oder sowas.
            Nennt sich LiveConnect und wurde mal von Netscape eingeführt. Damals hat MS die Technik aber noch übernommen. Daher gibt es die auch heute noch im IE.
            Weiter Dokuemntation:
            http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/livecon.htm

            Grüße

            Daniel