# Magic Value?!



## lumo (22. Sep 2009)

hab von meinem compiler gerade eine meldung bekommen die ich noch nie vorher gesehen hab...


```
java.lang.ClassFormatError: Incompatible magic value 1008813135 in class file MyApplet
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(Unknown Source)
	at java.security.SecureClassLoader.defineClass(Unknown Source)
	at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
```

was ist denn das nun?


----------



## bygones (22. Sep 2009)

schau mal da Bug ID: 4975146 Applet: java.lang.ClassFormatError: Incompatible magic value


----------



## lumo (22. Sep 2009)

bygones hat gesagt.:


> schau mal da Bug ID: 4975146 Applet: java.lang.ClassFormatError: Incompatible magic value



hab jetzt den code gefunden wo es ihn aufwirft (nach nem recompile bekomm ich aber andere meldungen, kein magic value mehr)

Data.java
[java=316]
			Properties p = new Properties();
			try {
				p.loadFromXML(new ByteArrayInputStream(xml.getBytes()));
			} catch (Exception e) {
				System.out
						.println("Exception raised while reading bytearrayinputstream!");
			}
			locationName = p.getProperty("locationName", "name not set");
[/code]
p.loadFromXML(...) hier wirfts die exception, warum ist mir nicht klar, da im xml die xml bereits vollständig geladen ist... und weiter als zu der zeile kommt er nicht (hab darunter einmal eine sysout und zu der kommt er nicht mal mehr...)

```
Exception in thread "thread applet-tt/at/lumo/net/langames/seatpickerV2/SeatPickerApplet.class-2" javax.xml.parsers.FactoryConfigurationError: Provider <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> not found
	at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
	at java.util.XMLUtils.getLoadingDoc(Unknown Source)
	at java.util.XMLUtils.load(Unknown Source)
	at java.util.Properties.loadFromXML(Unknown Source)
	at tt.at.lumo.net.langames.seatpickerV2.Data.getLocationFromWeb(Data.java:318)
	at tt.at.lumo.net.langames.seatpickerV2.Data.getLocation(Data.java:267)
	at tt.at.lumo.net.langames.seatpickerV2.Editor.initLocation(Editor.java:72)
	at tt.at.lumo.net.langames.seatpickerV2.SeatPickerApplet.init(SeatPickerApplet.java:64)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
```

also auch wenn die funktion getLocationFromWeb heisst... in zeile 318 muss der gar nicht mehr ins netz... denn da hat er schon lange das xml im String xml drin...

irgendwelche ideen?

edit: meine xml ist wohlgeformt:


> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
> <properties>
> <comment>generated @ Tue Sep 22 5:47:05 UTC 2009</comment>
> ...



note:
hab die selbe funktion in einer andwendung in verwendung und da wirfts keine exception, NUR im applet!


----------



## Spacerat (22. Sep 2009)

Und ob der nochmal ins Netz muss. Um deine XML-Datei zu überprüfen, benötigt er [c]http://java.sun.com/dtd/properties.dtd[/c]. Diese Datei wird offenbar nich gefunden.


----------



## lumo (22. Sep 2009)

Properties (Java 2 Platform SE 5.0)


> Note that the system URI (http://java.sun.com/dtd/properties.dtd) is not accessed when exporting or importing properties



hätte trotzdem folgendes geändert:

auf die darf das applet nicht zugreifen, da sie auf einer anderen domain liegt... -> muss ich die dtd noch auf meinen eigenen webspace packen...?

so, hab das dtd file jetzt auch noch auf dem webspace liegen sodass das applet drauf zugreifen darf...

xml kommt von: xml
und die dtd findet man hier: properties.dtd

zur info, ich habe in die xml reincodiert dass er das dtd nicht von java sun holen soll, sondern von meiner webpage, funktioniert das so, oder kann man das nicht umstellen?

allerdings kommt noch immer der exakt selbe fehler...
-> zugriffsrechte sinds jetzt zumindest nicht mehr :/


----------



## Spacerat (22. Sep 2009)

Wenn ich mir das ansehe, fange ich gerade an, an meiner Aussage zu zweifeln. Offensichtlicher ist, das deine Properties-Datei nicht gefunden wird. Vllt. bringts was, wenn man zunächst nicht mit XML, sondern, nur um festzustellen, ob der Pfad stimmt, mit Key-Value-Dateien arbeitet.


----------



## lumo (22. Sep 2009)

Spacerat hat gesagt.:


> Offensichtlicher ist, das deine Properties-Datei nicht gefunden wird. Vllt. bringts was, wenn man zunächst nicht mit XML, sondern, nur um festzustellen, ob der Pfad stimmt, mit Key-Value-Dateien arbeitet.



err hier mal der ganze (relevante) log meines applets:


> getLocationFromWeb(Test2)
> UrlData loads from: 'http://langames.uuuq.com/seatpicker/getLocationXML.php?location=Test2'
> UrlData received a response:
> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> ...


wie du sehen kannst ist in der ausgabe das komplette xml drin.
und wie bereits erwähnt verwende ich genau die selbe funktion in einer applikation die ich hier lokal starte (eigentlich sind nur die parameter anders zwischen applikation&applet)

:shock: ???:L

edit: die datei muss er ja gar nicht finden, da er ja einen inputstream bekommt... generiert aus einem string(xml)


----------



## Spacerat (22. Sep 2009)

Hab' mal 'n bissl' recherchiert (hier, hier und hier). Bei folgender Passage (FactoryFinder) ist mir eine Stelle besonders ins Auge gefallen:
	
	
	
	





```
static Object newInstance(String className, ClassLoader cl, boolean doFallback)
      throws ConfigurationError
  {
      try {
          Class providerClass = getProviderClass(className, cl, doFallback);
          Object instance = providerClass.newInstance();
          if (debug) {    // Extra check to avoid computing cl strings
              dPrint("created new instance of " + providerClass +
                     " using ClassLoader: " + cl);
          }
          return instance;
      }
      catch (ClassNotFoundException x) {
          throw new ConfigurationError(
              "Provider " + className + " not found", x);
      }
      catch (Exception x) {
          throw new ConfigurationError(
              "Provider " + className + " could not be instantiated: " + x,
              x);
      }
  }
```
Hier, Zeile 15: verglichen mit:
	
	
	
	





```
Provider <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> not found
```
fürchte ich, das die Klassendatei für "javax.xml.parsers.DocumentBuilderFactory" oder "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl" nicht gefunden wird. Wirklich seltsam, das er "<!DOCTYPE html..." als Klassennamen verwendet...


----------



## lumo (22. Sep 2009)

Spacerat hat gesagt.:


> fürchte ich, das die Klassendatei für "javax.xml.parsers.DocumentBuilderFactory" oder "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl" nicht gefunden wird. Wirklich seltsam, das er "<!DOCTYPE html..." als Klassennamen verwendet...



???:L???:L???:L :autsch: ähm.. un das heisst für mich (da er in der application ja alles findet...)?


----------



## Spacerat (22. Sep 2009)

:bahnhof: Keine Ahnung... Weiss ja nicht mal, wie er an diesen Klassennamen kommt und warum er die Klasse aus dem Netzwerk fischen will. Ein Applet ist doch erst lauffähig, wenn auf dem Clienten eine JVM installiert ist. Möglicherweise genügt ja beim Clienten ein Update der JVM.
@Edit: Kann man das Applet von ausserhalb (also z.B. von meiner Location) erreichen?


----------



## lumo (22. Sep 2009)

Spacerat hat gesagt.:


> :bahnhof: Keine Ahnung... Weiss ja nicht mal, wie er an diesen Klassennamen kommt und warum er die Klasse aus dem Netzwerk fischen will. Ein Applet ist doch erst lauffähig, wenn auf dem Clienten eine JVM installiert ist. Möglicherweise genügt ja beim Clienten ein Update der JVM.
> @Edit: Kann man das Applet von ausserhalb (also z.B. von meiner Location) erreichen?



klar!
hier


----------



## Spacerat (22. Sep 2009)

Den Vorgang hatte ich ja geschildert...
	
	
	
	





```
network: Cache-Eintrag nicht gefunden [url: http://langames.uuuq.com/seatpicker/META-INF/services/javax.xml.parsers.DocumentBuilderFactory, Version: null]
network: Verbindung von http://langames.uuuq.com/seatpicker/META-INF/services/javax.xml.parsers.DocumentBuilderFactory mit Proxy=DIRECT wird hergestellt
network: Verbindung von http://langames.uuuq.com:80/ mit Proxy=DIRECT wird hergestellt
network: Cache-Eintrag nicht gefunden [url: http://uuuq.com/404/index.html, Version: null]
network: Verbindung von http://uuuq.com/404/index.html mit Proxy=DIRECT wird hergestellt
network: Verbindung von http://uuuq.com:80/ mit Proxy=DIRECT wird hergestellt

// hier nimmt der Schwachfug seinen Lauf...

network: Cache-Eintrag nicht gefunden [url: http://langames.uuuq.com/seatpicker/%3c!DOCTYPE%20html%20PUBLIC%20%22-//W3C//DTD%20XHTML%201/0%20Transitional//EN%22%20%22http://www/w3/org/TR/xhtml1/DTD/xhtml1-transitional/dtd%22%3e.class, Version: null]
network: Verbindung von http://langames.uuuq.com/seatpicker/%3c!DOCTYPE%20html%20PUBLIC%20%22-//W3C//DTD%20XHTML%201/0%20Transitional//EN%22%20%22http://www/w3/org/TR/xhtml1/DTD/xhtml1-transitional/dtd%22%3e.class mit Proxy=DIRECT wird hergestellt
network: Verbindung von http://langames.uuuq.com:80/ mit Proxy=DIRECT wird hergestellt
network: Cache-Eintrag nicht gefunden [url: http://uuuq.com/404/index.html, Version: null]
network: Verbindung von http://uuuq.com/404/index.html mit Proxy=DIRECT wird hergestellt
network: Verbindung von http://uuuq.com:80/ mit Proxy=DIRECT wird hergestellt
basic: Fortschritts-Listener entfernt: sun.plugin.util.GrayBoxPainter$GrayBoxProgressListener@15d17d7
Exception in thread "thread applet-tt/at/lumo/net/langames/seatpickerV2/SeatPickerApplet.class-2" javax.xml.parsers.FactoryConfigurationError: Provider <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> not found
	at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
	at java.util.XMLUtils.getLoadingDoc(Unknown Source)
	at java.util.XMLUtils.load(Unknown Source)
	at java.util.Properties.loadFromXML(Unknown Source)
	at tt.at.lumo.net.langames.seatpickerV2.Data.getLocationFromWeb(Data.java:318)
	at tt.at.lumo.net.langames.seatpickerV2.Data.getLocation(Data.java:267)
	at tt.at.lumo.net.langames.seatpickerV2.Editor.initLocation(Editor.java:72)
	at tt.at.lumo.net.langames.seatpickerV2.SeatPickerApplet.init(SeatPickerApplet.java:64)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
```
Was immer noch ein Rätsel ist, warum er die Klasse aus dem Netzwerk fischen will, zumal sie in meiner JVM (JRE1.6.0_15) vorhanden ist. Kann es sein, das das im Applet-META_INF-Ordner ein entsprechender Eintrag existiert, der falsch verlinkt?


----------



## lumo (22. Sep 2009)

> Manifest-Version: 1.0
> Sealed: true



das ist in meiner manifest file, sonst nichts...
hab da nichts spezielles eingetragen dass er sich irgendwas aus dem netz holen sollte...
bin planlos...


----------



## Spacerat (22. Sep 2009)

lumo hat gesagt.:


> bin planlos...


me too...
Das einzige, was mir einfällt ist auf Key-Value-Pair-Dateien zurückzugreifen, damit dieser Parser nicht geladen werden muss...


----------



## lumo (23. Sep 2009)

das ist mir auch in den sinn gekommen.
darum hab ichs jetzt auf .properties format umgeschrieben und siehe da... jetzt funktionierts...

http://langames.uuuq.com/seatpicker/

.oO(ich glaub dass da aber noch irgendwo ein repaint fehlt, da bei einem tooltip der hintergrund dann weiss bleibt... - ne idee wo? )


----------



## Spacerat (23. Sep 2009)

lumo hat gesagt.:


> das ist mir auch in den sinn gekommen.
> darum hab ichs jetzt auf .properties format umgeschrieben und siehe da... jetzt funktionierts...
> 
> http://langames.uuuq.com/seatpicker/
> ...


Hab' zwar den Quelltext nicht, aber 'ne Idee. Möglicherweise fehlt dort kein "repaint()", sondern die vorhandenen werden innerhalb des falschen Panels (eines unterhalb des Applets) aufgerufen, weswegen die "paint()"-Methode des Applets nicht beachtet wird. Also eine Instanz des Applets in diesem Panel verfügbar machen und "applet.repaint()" statt simpelst "repaint()" aufrufen.


----------



## lumo (24. Sep 2009)

gelöst, hab wie du geschrieben hast das applet.repaint aufgerufen...


----------



## lumo (24. Sep 2009)

oder doch nicht....
in meiner applikation funktionierts, im applet nicht... 

http://langames.uuuq.com/seatpicker/

.oO(ev wieder eine rechtefrage - intern)


----------



## Spacerat (24. Sep 2009)

Hmmm... Ob das Applet noch irgendeinen Parent-Container hat? Vllt. mal eine Instanzvariable der obersten Component (top) anlegen und vom Applet aus dessen repaint() Methode aufrufen. Dazu die addNotify()-Methode des Applets überschreiben.
	
	
	
	





```
private Component top;

public void addNotify()
{
  super.addNotify();
  top = applet
  while(top.getParent() != null) {
    top = top.getParent();
  }
}
```


----------



## lumo (25. Sep 2009)

schande, hab einen mouselistener erstellt aber dann vergessen hinzuzufügen, wenn man nur VIEWer ist... *blush*


*Kaum macht man's richtig... geht's *


----------

