Probleme mit GWT und JAXB

IcocaI

Mitglied
Hallo Leute,

vielleicht könnt ihr mir da weiter helfen. Ich habs mittlerweile soweit hinbekommen, dass ich mit JAXB XML Dateien in JavaObjekten einfügen kann. Nun wollte ich das ganze mit GWT in Verbindung setzten. Nun meckert Eclipse:

Java:
No source code is available for type javax.xml.JAXBElement<T>; did you forget to inherit a required module?
No source cod......
No source ....
No source code is available fpr type java.io.FilenotFoundException; did you forget to inherit a required module?

nach einer langer suche in google konnte ich vielleicht den Grund herausfinden. GWT hat Probleme mit non-GWT libs. Wie kann ich dieses Problem beheben?
Arbeite mit JAXB 2.0


Update:
JAXB kann nicht in JAVAScript umgewandelt werden ...
 
Zuletzt bearbeitet:
Update:
JAXB kann nicht in JAVAScript umgewandelt werden ...

Nichts anderes sagt die Fehlermeldung ja auch.
GWT benötigt um den Code für den Clienten zu "compilieren" die Sourcen für jede Klasse die verwendet werden. Bei fremden Bibliotheken bedeutet dass das diese ebenfalls als Source-Dateien vorliegen müssen. Wenn es sich um einzelne überschaubare Klassen handelt die als Sourcen nicht verfügbar sind (zB FileNotFoundException) kann man diese auch mit Dummy-Implementierungen ersetzen.

Generell sollte man aber in diesem Fall darüber nachdenken ob die XML generrierung nicht auf die Seite des Servers verlagert werden kann/sollte?

Viele Grüße
Dom
 
Generell sollte man aber in diesem Fall darüber nachdenken ob die XML generrierung nicht auf die Seite des Servers verlagert werden kann/sollte?
hm das geht schlecht. Der Server schickt nach meiner Anfrage die Auswertung. Diese Empfange ich dann und gebe es ja einfach in den entsprechenden Felder aus. Der Server empängt die Nachricht über CICS. Also ich muss schon zusehen, dass ich XML verarbeiten und auch wieder senden kann.

Ich hab mir auch schon überlegt, ob es nicht irgendwie gehen würde, die ganze xml geschichte außerhalb von GWT zu realisieren. nur wie bekomme ich die daten dann wieder ins gwt-projekt rein :/ ... die ganze Nachricht in eine Textdatei reinschreiben und Zeile für Zeile, die Felder in eine Liste einlesen?
Ich hatte eigentlich JAXB ausgewählt, weil ich XSDs zu verfügung habe und die dann nicht neu schreiben muss. Da das schon etwas komplex ist.

Ich hab noch vielleicht herausgefunden, das man mit JDOM (was ja auf DOM basiert), JAX-WS (was aber mit websphere zu tun hat) und xmlBean mit GWT arbeiten kann. Stimmt das?

Wenn es sich um einzelne überschaubare Klassen handelt die als Sourcen nicht verfügbar sind (zB FileNotFoundException) kann man diese auch mit Dummy-Implementierungen ersetzen
wie sieht das ganze z.b. aus? hast du vllt nen link zu ner seite, wos erklärt wird?
 
Hab zwar jetzt die FehlerMeldungen weg bekommen aber trotzdem bleibt noch die Meldung:

Java:
[TRACE] Finding entry point classes
[ERROR] [x] Unable to find type 'de.y.x.client.x'
[ERROR] [x] Hint: Previous compiler errors may have made this type unavailable
[ERROR] [x] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly
[ERROR] [x] Failed to load module 'x' from user agent 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8 GTB6' at localhost:....

Ich denke, dass es mit den eingebundenen sources zu tun hat. Also so wies aussieht kann man es vergessen JAXB mit GWT zu kombinieren. Leider geht da wieder Zeit drauf. Da es irgendwie auch nichts bringt, weiter danach zu suchen, muss ich mir irgendwie eine alternative suchen. Naja hier laufen anscheinend keine Experten in Sachen GWT rum :rolleyes: schade eigentlich .....
 
Zuletzt bearbeitet:
. Also so wies aussieht kann man es vergessen JAXB mit GWT zu kombinieren.

Kann ich mir gerne noch mal ansehen die nächsten Tage und mein Glück versuchen, aber wie gesagt: wenn die Sourcen nicht vorliegen, kann GWT einfach kein JavaScript generrieren. Wenn Sourcen vorliegen, sollte es gehen, müsste ich aber ebenfalls versuchen. Generell kannst du natürlich XML auch auch Client-Seite parsen (http://google-web-toolkit.googlecode.com/svn/javadoc/1.5/com/google/gwt/xml/client/XMLParser.html) das ganze über JAXB zu machen hat natürlich den weit größeren Charme, da gebe ich Dir recht.

. wie sieht das ganze z.b. aus? hast du vllt nen link zu ner seite, wos erklärt wird?.

Ich erinnere mich in einer sehr frühern GWT Version das ich in die Richtung mal was hinbekommen habe. Inzwischen hat Google es aber anscheinend fertig gebracht GWT um ein entsprechendes Features zu erweitern. Das ganze nennt sich "super-source" und dient dazu Klassen ein zu binden bei denen keine Source vorliegt. Ganz schön funktioniert es zwar nicht (weil es vorraussetz eine "falsche" Package declaration in der entsprechenden Java-Klasse zu verwenden und die IDE das gar nicht leiden kann) aber funktionieren tut es:

unbenanntqr.png


Generell dazu:
  • in der XML werden als Pattern die Pfade angegeben die für den Clienten generriert werden sollen (im Standard ".../client/..." )
  • als Super-Source das Package ebenfalls eintragen (hier ebenefalls als Pattern)
  • Unschön: damit GWT das ganze korrekt kompilieren kann, muss die Package-Deklaration auf die zu überschreibende Struktur passen (hier: java.io) obwohl das zu einem IDE-Fehler führt
  • (zu testen wäre noch ob man den Fehler nicht durch korrekte Package-Pfade weg bekommt, auf anhieb hat es bei mir gerade jedenfalls nicht funktioniert)




Viele Grüße
Dom
 
Danke ... ich werd mir das ganze nochmal am Wochenende angucken ... brauch erstmal ne Pause :/ ... schönes week
 
Nabend Zsammen,

also ich hab mir im speziellen noch mal JAXB im Zusammenspiel mit GWT angesehen. Vielleicht vorweg: ich bin alles anderes als ein GWT Experte ;) aber naja: in der Theorie kann man externe Bibliotheken (wie JaxB) in GWT einbinden. JAXB befürchte ich jedoch ist eine Nummer zu groß, um die Umsetzung wirklich (zeitlich) für ein einzelnes Projekte effektiv zu machen (vorrausgesetzt man schafft es überhaupt an alle Sourcen ran zu kommen)

Ich habe mir mal die Sourcen von JAXB geschnappt und wie oben beschrieben ins Projekt eingefügt, das führt dann natürlich wiederrum zu Abhänigkeiten (ohne Ende...)
Code:
  Validating newly compiled units
      [ERROR] Errors in 'file:/E:/Entwicklung/eclipseWorkspace/GWTTest/src/gwt/my_jaxb/javax/xml/bind/annotation/W3CDomHandler.java'
         [ERROR] Line 25: No source code is available for type org.w3c.dom.Element; did you forget to inherit a required module?
         [ERROR] Line 25: No source code is available for type javax.xml.transform.dom.DOMResult; did you forget to inherit a required module?
         [ERROR] Line 27: No source code is available for type javax.xml.parsers.DocumentBuilder; did you forget to inherit a required module?
         [ERROR] Line 71: No source code is available for type org.w3c.dom.Node; did you forget to inherit a required module?
         [ERROR] Line 72: No source code is available for type org.w3c.dom.Document; did you forget to inherit a required module?
         [ERROR] Line 77: No source code is available for type org.w3c.dom.DocumentFragment; did you forget to inherit a required module?
         [ERROR] Line 86: No source code is available for type javax.xml.transform.Source; did you forget to inherit a required module?
         [ERROR] Line 87: No source code is available for type javax.xml.transform.dom.DOMSource; did you forget to inherit a required module?
      [ERROR] Errors in 'file:/E:/Entwicklung/eclipseWorkspace/GWTTest/src/gwt/my_jaxb/javax/xml/bind/util/JAXBResult.java'
         [ERROR] Line 54: No source code is available for type javax.xml.transform.sax.SAXResult; did you forget to inherit a required module?
      [ERROR] Errors in 'file:/E:/Entwicklung/eclipseWorkspace/GWTTest/src/gwt/my_jaxb/javax/xml/bind/ContextFinder.java'
         [ERROR] Line 13: The import java.lang.reflect cannot be resolved
         [ERROR] Line 14: The import java.lang.reflect cannot be resolved
         [ERROR] Line 15: The import java.net cannot be resolved
         [ERROR] Line 19: The import java.util.logging cannot be resolved
.......

diese Abhänigkeiten müssten man jetzt entweder durch Anpassung entfernen (falls man das gemäß Lizenzmodell überhaupt darf) oder eben durch das Einbinden der Sourcen wieder aufheben (Teufelskreis)
Das meinte ich eben oben mit "einzelne Überschaubare Klassen", ein Framwork wie JAXB hat denke ich einfach zu ausufernde Abhänigkeiten, aber ich lasse mich auch sehr sehr gerne eines besseren belehren :)

Ergo gehört so was auf Seiten des Servers, wobei ich dein problem damit noch nicht ganz verstanden habe, wobei ich CICS jetzt auch nicht kenne. Aber prinzipiell würde ich das ganze doch eher so aufbauen: Client (GWT) schickt anfrage an Application Server (im idealfall wenn der die Server Applikation in Java geschrieben werden kann über GWT-RPC) der wiederrum leitet die Frage an CICS weiter, bekommt ein XML (?), parst das XML in ein Object und liefert das Object wieder an GWT ... oder ist meine Brille zu rosa :) ?

Grüße
Dom
 
diese Abhänigkeiten müssten man jetzt entweder durch Anpassung entfernen (falls man das gemäß Lizenzmodell überhaupt darf) oder eben durch das Einbinden der Sourcen wieder aufheben (Teufelskreis)
Das meinte ich eben oben mit "einzelne Überschaubare Klassen", ein Framwork wie JAXB hat denke ich einfach zu ausufernde Abhänigkeiten, aber ich lasse mich auch sehr sehr gerne eines besseren belehren :)

hm ok ... also noch mehr aufwand als lohnenswert ... aber dom bzw. jdom wäre dafür geeigneter/kompatibler oder? Also das mit jaxb, wie der aus den xsds schon direkt klassen bildet ist natürlich super ... mit jdom geht das soweit ich gelesen habe nicht. d.h. ich müsste mir das ganze manuel neu schreiben :( und das ist nicht ohne ...

Ergo gehört so was auf Seiten des Servers, wobei ich dein problem damit noch nicht ganz verstanden habe, wobei ich CICS jetzt auch nicht kenne. Aber prinzipiell würde ich das ganze doch eher so aufbauen: Client (GWT) schickt anfrage an Application Server (im idealfall wenn der die Server Applikation in Java geschrieben werden kann über GWT-RPC) der wiederrum leitet die Frage an CICS weiter, bekommt ein XML (?), parst das XML in ein Object und liefert das Object wieder an GWT ... oder ist meine Brille zu rosa :) ?

Hm als Applicationsserver könnte ich nicht zufällig einen Apacheserver nehmen xD? CICS ist eine Middleware. Sie unterstützt die interaktion zwischen Anwendungen auf verschiedenen Plattformen. Also sie verwaltet die Nachrichten als eine Art Verteiler zu anderen Systemen ^^ .. so wie ichs verstanden habe :p ... Also die Arbeitsweise ist denke ich nicht verkehrt. Client (GWT) -> Application Server --(XML)--> CICS --(XML)--> Application Server -> Client (GWT) ...

Voreingestellt ist ja schon ein GWT-RPC. Nämlich zum Jetty-Server oder? sonst könnte ich ja keine localhostsession starten, um die Seite vollständig anzuzeigen oder nicht? :D .... das mit den Application Server muss ich mir vllt nochmal anschauen, obs nicht doch geht :/ ... wäre natürlich super ... Über einen Websphere würde das nicht auch gehen können? dafür müsste ich dann aber JAX-WS nehmen, um mit dem Websphere zu kommunizieren und wenn der websphere die nachricht als xml weiter verschicken kann wäre es super ...

Also Client ist GWT.
GWT-RPC ist lediglich für den Nachrichtenaustausch zuständig.

Aber ok .. ich weiche vom eigentlichen Thema ab ^^ ... Ich werd nochmal gucken was sich machen lässt, wenn ich bei mir überhaupt noch hilfe finde als Azubi :/ ...



Grüße
Dom

Danke für deine Mühe :) ..
 
Hi,

also ich denke, dass ich ein Stück weitergekommen bin. Es wurde mir vorher nicht klar, dass in GWT speziell eine Trennung zu Server und Client gibt. D.h. die Trennung erfolgt durch die Package. In dem Serverteil kommen die non-Javaclasses und der rest, wo daraus JAVAScript erstellt wird halt die Sachen, was GWT noch verstehen kann.
Wahrscheinlich meintest du es hiermit, dass ganze aufm Serverteil zu verlagern ^^ ... Ich hab die ganze Zeit gedacht, dass man extra dafür einen "SERVER" braucht, wo etc. die Verarbeitung der XML gemacht wird. Hoffe das war klar was ich meinte.

Wenn ichs geschafft habe, dann schreib ichs hier rein. Aber wenn du da noch interesse hast, kannst du ja mit machen ^^ ... Aber ich denke, dass ichs jetzt irgendwie hinkriegen werde ...
 
update:

also ich habs herausgekriegt, wie man nun non-gwt klassen in gwt mit einbinden kann ^^ ...
werds vllt noch hier hin schreiben aber ich hab momentan wenig Zeit ...
 

Neue Beiträge

Zurück