Avatar billede lazenby Nybegynder
04. oktober 2005 - 13:00 Der er 16 kommentarer og
1 løsning

java.lang.NoClassDefFoundError: org/apache/xpath/XPathException

Hej Eksperter

Ny til jsp og jstl. Jeg har en jsp-side, hvor jeg importer en ekstern xml-fil, som jeg vil gøre noget ved med jstl's xml tag library. Filen importeres fint (jeg kan få vist hele indholdet med <c:out>), og parses tilsyneladende uden problemer af <x:parse>. Men når jeg vil vælge at få vist bestemte dele af dokumentet med <x:out> får jeg nedenstående fejl.

Jeg bruger Tomcat/5.0.28, og har placeret jstl.jar og standard.jar i WEB-INF/lib-mappen under min applikation. Så vidt jeg kan se, har jeg angivet de rigtige taglib uri'er til jstl 1.1, nemlig
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %> og
<%@ taglib prefix='x' uri='http://java.sun.com/jsp/jstl/xml' %>.

Jeg synes at kunne fornemme, at fejlen skyldes, at tomcat enten ikke kan loade de nødvendige klasser eller at mine XPath-udtryk er helt i skoven - men løsningen?

De tre linjer kode:

<c:import var="modul" url="http://localhost:8080/dokument.xml"  />
<x:parse doc="${modul}" var="xmlDoc" />
<x:out select="" />

Fejlen kommer uanset hvilken xpath-expression jeg indsætter i sidste linje.

exception
javax.servlet.ServletException: org/apache/xpath/XPathException
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.submodule_jsp._jspService(submodule_jsp.java:131)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause
java.lang.NoClassDefFoundError: org/apache/xpath/XPathException
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClass(ClassLoader.java:620)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1634)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:860)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1307)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
org.apache.taglibs.standard.tag.common.xml.ExprSupport.doStartTag(ExprSupport.java:63)
org.apache.jsp.submodule_jsp._jspx_meth_x_out_0(submodule_jsp.java:353)
org.apache.jsp.submodule_jsp._jspx_meth_template_put_1(submodule_jsp.java:282)
org.apache.jsp.submodule_jsp._jspx_meth_template_insert_0(submodule_jsp.java:158)
org.apache.jsp.submodule_jsp._jspService(submodule_jsp.java:103)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

- lazenby
Avatar billede kalp Novice
04. oktober 2005 - 13:13 #1
java.lang.NoClassDefFoundError:

plejer jeg, at få når den ikke kan finde en klasse.

Jeg ved ikke om fejlen også kan betyde noget andet.
Avatar billede lazenby Nybegynder
04. oktober 2005 - 13:18 #2
Ja, det er som skrevet også det, jeg tror. Men hvilken klasse, og hvad gør jeg?
Avatar billede kalp Novice
04. oktober 2005 - 13:24 #3
Ja det vil jeg lade en anden svare på for jeg kan ikke rigtig gennemskue det:)
men en god ide er, at sikre dig denne

dokument.xml

er skrevet rigtigt.. dvs. at du tager højde for store og små bogstaver.

Hedder den Dokument.xml

på serveren så vil du få sådan en fejl..
Avatar billede lazenby Nybegynder
04. oktober 2005 - 13:28 #4
ok, den side af sagen skulle være i orden. Dokument.xml skulle også være velformet.
Avatar billede arne_v Ekspert
04. oktober 2005 - 13:30 #5
hvilken SDK/JDK version bruger du ?

og har du installeret en ny Xalan ? og hvis ja hvor ?
Avatar billede arne_v Ekspert
04. oktober 2005 - 13:31 #6
og forkert url/filnavn bør ikke kunne give en java.lang.NoClassDefFoundError
(medmindre det er en .class fil som har det forkerte navn)
Avatar billede lazenby Nybegynder
04. oktober 2005 - 13:38 #7
jdk1.5.0_04.

Jeg har netop kopieret en xalan.jar (2.7.0) og en serializer.jar til %catalina_home%/lib og til WEB-INF/lib under min applikation.

Det virkede ikke umiddelbart efter at have genstartet tomcat, men det gør det nu - jeg må tilstå, at jeg faktisk ikke ved, hvad jeg har gjort. Jeg får stadig intet output, men så længe der ikke er fejl, finder jeg nok ud af det...
Avatar billede lazenby Nybegynder
04. oktober 2005 - 13:40 #8
Dvs. at xalan er nødvendig for at kunne udføre både xslt-transformationer og bruge xpath?
Avatar billede arne_v Ekspert
04. oktober 2005 - 13:44 #9
XSLT kræver en XSLT implementation
fra og med Java 1.4 er den indbygget i Java
faktisk er det en Xalan som kommer med Java
men lige netop derfor kan det godt drille at bruge en nyere Xalan
se f.eks. http://xml.apache.org/xalan-j/faq.html#faq-N100D6
Avatar billede arne_v Ekspert
04. oktober 2005 - 13:44 #10
det virker f.eks. ikke at smide den i WEB-INF/lib
Avatar billede arne_v Ekspert
04. oktober 2005 - 13:44 #11
men godt at det virker nu
Avatar billede arne_v Ekspert
04. oktober 2005 - 13:46 #12
Jeg kan ikke huske om XPath kommer med XML parser eller med XSLT
Avatar billede lazenby Nybegynder
04. oktober 2005 - 13:47 #13
Tjah, jeg kan få smidt xml-dokumentet i sin fulde længde, men jeg kan stadig ikke få den til at evaluere xpath-udtryk - så måske ligger xalan.jar alligevel ikke rigtigt?

Burde <x:out select="$var//element" /> ikke outputte indholdet af alle <element>-elementer, forudsat selvfølgelig at $var indeholder et parset xml-dokument?
Avatar billede lazenby Nybegynder
04. oktober 2005 - 13:54 #14
..og nu virker det ikke igen. Jeg er rimeligt blank..
Avatar billede lazenby Nybegynder
04. oktober 2005 - 15:23 #15
Arne_v, dit link opklarede alligevel sagen. Iflg linket skal xalan-jar-filerne dog kopieres til %java_home%/lib/endorsed - men hvis de skal virke for tomcat også, skal de åbenbart i stedet være i %catalina_home%/common/endorsed, hvor de også overrider den version af xalan, som åbenbart er indbygget i java.

Nu virker det, og det er utroligt herligt.

arne_v, læg et svar, så får du pointene.

- lazenby
Avatar billede arne_v Ekspert
04. oktober 2005 - 15:31 #16
det er vist næste punkt i FAQ'en

:-)
Avatar billede lazenby Nybegynder
04. oktober 2005 - 15:34 #17
Ja, det er det da også. Jeg må have skippet det, fordi jeg bruger jdk 1.5 og der står 1.4. Tsk-tsk. Pointene har du dog under alle omstændigheder fået :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester