Hello,

If anyone wants to do validation via Java classes here is one possible way (where no actual Cocoon code needs to be changed):

Create a JavaClassValidatorBuilder which operates the same way as the ListenerBuilder:

package my.package;

import java.lang.Exception;
import org.apache.cocoon.forms.formmodel.WidgetDefinition;
import org.apache.cocoon.forms.validation.WidgetValidatorBuilder;
import org.apache.cocoon.forms.validation.WidgetValidator;
import org.apache.cocoon.forms.util.DomHelper;
import org.apache.cocoon.util.ClassUtils;
import org.apache.avalon.framework.thread.ThreadSafe;
import org.w3c.dom.Element;

public class JavaClassValidatorBuilder implements WidgetValidatorBuilder, ThreadSafe
{
public WidgetValidator build(Element element,
WidgetDefinition widget) throws Exception
{
String name = DomHelper.getAttribute(element, "class");


Object validator = ClassUtils.newInstance(name);
if (Class.forName(WIDGET_VALIDATOR_PACKAGE + PACKAGE_SEPARATOR + WIDGET + WIDGET_VALIDATOR_CLASSNAME).isAssignableFrom(validator.getClass()))
{
return (WidgetValidator)validator;
}
else
{
throw new Exception("Class " + validator.getClass() + " is not a " + WIDGET_VALIDATOR_CLASSNAME);
}
}
}


Where:
WIDGET_VALIDATOR_PACKAGE is "org.apache.cocoon.forms.validation"
PACKAGE_SEPARATOR is "."
WIDGET_VALIDATOR_CLASSNAME is "WidgetValidator"

Update the coccon.xconf file's forms-validators element with:
<validator class="my.package.JavaClassValidatorBuilder" name="java"/>

Restart cocoon and works fine, can now add tagging such as
<fd:validation>
   <java class="my.other.package.MyJavaClassThatValidatesStuff"/>
</fd:validation>

Scott.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to