[Java] ClassFormatError na instanceof

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Red devil
  • Registratie: December 1999
  • Laatst online: 15:58
Beste tweakers,

Vervelend probleem, snap er niks van. Source van een webapp programma (origineel gemaakt voor tomcat) die ik deploy op een Sun Glassfish V2 (V3 -> geen verschil) Java applicatieserver. Deployen gaat ogenschijnlijk ok, maar sommige paginas zorgen voor een rare error:

code:
1
2
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file /org/SearchResultFile
        at java.lang.ClassLoader.defineClass1(Native Method)


Het gaat ergens mis bij de volgende code:

code:
1
2
3
4
5
6
7
public static void addSessionResult(String key, Object result, PageContext page)
{
 

  if (result instanceof org.SearchResultFile) { 
...
}


result is een SearchResult object en is geen null. De vergelijking zou dus false moeten geven. De source van SearchResultFile is aanwezig.

Vervolgens krijg ik de volgende error:

code:
1
2
3
4
5
6
7
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file org/SearchResultFile
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:961)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1423)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)


Ik snap er niks van, niks te vinden op internet over dit probleem. Anyone here?

Acties:
  • 0 Henk 'm!

  • Leftblank
  • Registratie: Juni 2004
  • Laatst online: 17:41
Klopt de naam org.SearchResultFile wel, over 't algemeen bestaan packagenamen uit meer segmenten namelijk? (Evt kun je 't ook nog gewoon importeren en puur de classname gebruiken, mocht je dat prettiger vinden werken)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Heb je überhaupt al eens gewoon gegoogled op die error?
http://forums.java.net/jive/thread.jspa?messageID=226931
Leftblank schreef op maandag 08 juni 2009 @ 12:52:
Klopt de naam org.SearchResultFile wel, over 't algemeen bestaan packagenamen uit meer segmenten namelijk? (Evt kun je 't ook nog gewoon importeren en puur de classname gebruiken, mocht je dat prettiger vinden werken)
Dan zou je een ClassNotFound error krijgen. Het lijkt me eerder dat de class wel is gedefinieerd zodat het compilet middels een stubbed class file, maar verder geen code bevat. Een beetje vergelijkbaar met een C++ header zeg maar. Dat is ook wat er wordt uitgelegd op de pagina die ik zojuist linkte.

[ Voor 73% gewijzigd door .oisyn op 08-06-2009 12:58 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Red devil
  • Registratie: December 1999
  • Laatst online: 15:58
Leftblank schreef op maandag 08 juni 2009 @ 12:52:
Klopt de naam org.SearchResultFile wel, over 't algemeen bestaan packagenamen uit meer segmenten namelijk? (Evt kun je 't ook nog gewoon importeren en puur de classname gebruiken, mocht je dat prettiger vinden werken)
Hij bestaat uit meer segmenten :) , heb wat weggehaald. Maar ik kan zo bij de source komen en alles dus dat lijkt goed te staan.

Acties:
  • 0 Henk 'm!

  • Red devil
  • Registratie: December 1999
  • Laatst online: 15:58
Jawel, maar geen linken naar een probleem n.a.l. een instanceof vergelijking. Even jouw link lezen, dank.

Ok, als ik het goed begrijp:
You can compile you code with this jar, but of course you cannnot run your application with it since it contains only the Java EE 5 APIs and does not contain any method bodies. If you try to run, you would get this exception:

Exception in thread "main" java.lang.ClassFormatError:
Absent Code attribute in method that is not native or abstract in class file javax/mail/Session

In order to execute a Java EE 5 application, you'll still need a Java EE 5 container, like for example the GlassFish application server.
Ludo
Wellicht moet ik bepaalde GlassFish server libraries meelinken? Het is van origine een programma wat voor Tomcat geschreven, wellicht dat dat ook meespeelt.

[ Voor 55% gewijzigd door Red devil op 08-06-2009 13:12 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Die instanceof is het probleem verder ook niet. Het gaat erom dat je een class gebruikt in je code wat geen volledige class file is in de .jar. Op het moment dat die class wordt ingeladen (omdat jij toevallig instanceof doet, maar als je iets anders deed had je precies hetzelfde probleem gehad) gaat het fout.

Je zegt dat je wel de source hebt van die class. Staat je classpath dan wel goed? Want blijkbaar is het dus het geval dat hij bij het runnen niet de door jouw gecompileerde SearchResultFile.class gebruikt.

.edit: ah wacht, ik begrijp je verkeerd. Je hebt de source van wat die class gebruikt, niet van die class zelf :)

[ Voor 10% gewijzigd door .oisyn op 08-06-2009 13:16 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Maxxi
  • Registratie: Mei 2004
  • Laatst online: 19-04 19:18
Je zou eens kunnen proberen een clean build uit te voeren?

Acties:
  • 0 Henk 'm!

  • Red devil
  • Registratie: December 1999
  • Laatst online: 15:58
.oisyn schreef op maandag 08 juni 2009 @ 13:13:
Die instanceof is het probleem verder ook niet. Het gaat erom dat je een class gebruikt in je code wat geen volledige class file is in de .jar. Op het moment dat die class wordt ingeladen (omdat jij toevallig instanceof doet, maar als je iets anders deed had je precies hetzelfde probleem gehad) gaat het fout.

Je zegt dat je wel de source hebt van die class. Staat je classpath dan wel goed? Want blijkbaar is het dus het geval dat hij bij het runnen niet de door jouw gecompileerde SearchResultFile.class gebruikt.

.edit: ah wacht, ik begrijp je verkeerd. Je hebt de source van wat die class gebruikt, niet van die class zelf :)
Nee bedankt! Je opmerking deed me wel aan het denken, ik heb idd de source maar toen ik de LIB folder keek zag ik daar ook een JAR file met daarin het hele project (met alle classes). Op 1 of andere manier pakt hij die eerst. Heb die file uit de library gehaald en nu werkt het wel goed!!!
Ik snapte al niet waarom het niet werkte, had immers de source. Maar in het vervolg maar beter de libraries checken :)

Thanks!
Pagina: 1