You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Rob van Oostrum <li...@springwellfarms.ca> on 2003/11/15 00:11:24 UTC

NoClassDefFoundError in custom validator

I added the commons validator to my Struts implementation. The
out-of-the-box stuff is working just fine. However, I added the following
custom validator:

public class BarnmanValidator implements Serializable {
    public static boolean validateEmailAddress(Object bean, Field field) {

[etc, etc, etc]

When this one is about to be invoked, I get this exception (as root cause of
a servlet exception):

java.lang.NoClassDefFoundError: org/apache/commons/validator/Field
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:1647)
	at java.lang.Class.getMethod0(Class.java:1893)
	at java.lang.Class.getMethod(Class.java:976)
	at
org.apache.commons.validator.Validator.validateFieldForRule(Validator.java:4
01)

the validator def:

<validator name="email.unique"
	     classname="com.springwell.barnman.validator.BarnmanValidator"
	     method="validateEmailAddress"

methodParams="java.lang.Object,org.apache.commons.validator.Field"
	     msg="errors.email.duplicate"
/>

the form def:

<form name="register" >
	<field property="emailAddress" depends="required,email,email.unique" />
	<field property="password1" depends="required" />
	<field property="password2" depends="required" />
	<field property="firstName" depends="required" />
	<field property="lastName" depends="required" />
</form>

If I omit my custom validator everything works fine.

the commons-validator.jar is in my war file's WEB-INF/lib, and there seems
to be no problem locating org.apache.commons.validator.Validator (as you can
tell from the stacktrace). Only thing I can think of is that it's a
different classloader trying to load the Field class through reflection? Any
known solutions to known problems?


thanks in advance,
Rob


---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org


RE: NoClassDefFoundError in custom validator

Posted by Rob van Oostrum <li...@springwellfarms.ca>.
Ok I figured out a way to make it all work ...

The solution ended up being to put all the commons jar files in the root of
the ear, and add them to application.xml as java modules. Looks like it was
indeed a classloader issue then ... which would lead me to think that this
is a bug. No reason why Struts shouldn't be able to do all of the
reflection, especially since this is hardly pushing the envelope. Any
thoughts?

cheers
Rob

> -----Original Message-----
> From: Rob van Oostrum [mailto:lists@springwellfarms.ca]
> Sent: November 14, 2003 6:11 PM
> To: struts-user@jakarta.apache.org
> Subject: NoClassDefFoundError in custom validator
>
>
> I added the commons validator to my Struts implementation. The
> out-of-the-box stuff is working just fine. However, I added the following
> custom validator:
>
> public class BarnmanValidator implements Serializable {
>     public static boolean validateEmailAddress(Object bean, Field field) {
>
> [etc, etc, etc]
>
> When this one is about to be invoked, I get this exception (as
> root cause of
> a servlet exception):
>
> java.lang.NoClassDefFoundError: org/apache/commons/validator/Field
> 	at java.lang.Class.getDeclaredMethods0(Native Method)
> 	at java.lang.Class.privateGetDeclaredMethods(Class.java:1647)
> 	at java.lang.Class.getMethod0(Class.java:1893)
> 	at java.lang.Class.getMethod(Class.java:976)
> 	at
> org.apache.commons.validator.Validator.validateFieldForRule(Valida
> tor.java:4
> 01)
>
> the validator def:
>
> <validator name="email.unique"
> 	     classname="com.springwell.barnman.validator.BarnmanValidator"
> 	     method="validateEmailAddress"
>
> methodParams="java.lang.Object,org.apache.commons.validator.Field"
> 	     msg="errors.email.duplicate"
> />
>
> the form def:
>
> <form name="register" >
> 	<field property="emailAddress"
> depends="required,email,email.unique" />
> 	<field property="password1" depends="required" />
> 	<field property="password2" depends="required" />
> 	<field property="firstName" depends="required" />
> 	<field property="lastName" depends="required" />
> </form>
>
> If I omit my custom validator everything works fine.
>
> the commons-validator.jar is in my war file's WEB-INF/lib, and there seems
> to be no problem locating org.apache.commons.validator.Validator
> (as you can
> tell from the stacktrace). Only thing I can think of is that it's a
> different classloader trying to load the Field class through
> reflection? Any
> known solutions to known problems?
>
>
> thanks in advance,
> Rob
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: struts-user-help@jakarta.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org


RE: NoClassDefFoundError in custom validator

Posted by Rob van Oostrum <li...@springwellfarms.ca>.
oops ...

I'm running the Struts 1.1 binary release on jboss-3.2.1_tomcat-4.1.24 and
the war file resides in an ear file. I've tried sticking jars in the ear's
root and referencing them from the war file's manifest, but this gave
exactly the same results.

cheers
Rob

> -----Original Message-----
> From: Rob van Oostrum [mailto:lists@springwellfarms.ca]
> Sent: November 14, 2003 6:11 PM
> To: struts-user@jakarta.apache.org
> Subject: NoClassDefFoundError in custom validator


---------------------------------------------------------------------
To unsubscribe, e-mail: struts-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: struts-user-help@jakarta.apache.org