Valter Silva
Valter Silva

Reputation: 16656

Class found in a Java application but not in JSF?

I'm trying to use bacnet4j with JSF.

I build an application in .java which turn on/off a lamp, but if I try to call the same method from a JSF page (which communicates with my manage bean) , gives me :

type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: com/serotonin/bacnet4j/type/Encodable
root cause

java.lang.NoClassDefFoundError: com/serotonin/bacnet4j/type/Encodable
root cause

java.lang.ClassNotFoundException: com.serotonin.bacnet4j.type.Encodable

But I'm pretty sure that the class is there, because if not my java application don't work, right ?

Any idea why this is happening ?

Upvotes: 1

Views: 227

Answers (2)

BalusC
BalusC

Reputation: 1108557

The JAR file containing this class should go in webapp's /WEB-INF/lib folder.

A plain Java Application does not use the same classpath as a Java Web Application. For a plain Java Application the classpath is usually specified by -cp or -classpath argument in java command, or if unspecified, by %CLASSPATH% environment variable, or if being a JAR, by Class-Path entry in JAR's /META-INF/MANIFEST.MF. For a Java Web Application the classpath covers by default the webapp's /WEB-INF/lib and /WEB-INF/classes folder and server's /lib (and more) folders and any custom folders which you can specify in server-specific configuration, such as shared.loader property of /conf/catalina.properties in case of Tomcat.

Upvotes: 2

Rolf Rander
Rolf Rander

Reputation: 3321

NoClassDefFound means that the class was available at compilation but not at runtime. You need to add the jar-file with the appropriate class to your war (or add it to the application server classpath)

Upvotes: 0

Related Questions