Ray, I have two issues with your below files.
1. In your validation.xml, you list "arg" tags without a position number. You should be using arg0, arg1, arg2, or arg3. In future versions (possibly in 1.2.4 but I'm not positive this early on a Sunday morning) 'arg0' will become 'arg position="0"' with arg1, arg2, and arg3 following similar patterns of replacing the position's value with the correct number. 2. In the "MessageResources.properties" file you cut/pasted into this email, you have spaces before most of the validator key names. I'm not sure if that is "legal" so be warned that it MIGHT cause additional problems. Additionally, for your struts-config.xml plug-in definition, you might want to try the stopOnFirstError property. The behavior might be useful if you try it out. Using it would change your plug-in definition to: <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> <set-property property="stopOnFirstError" value="false"/> </plug-in> Regards, David P.S. Sorry I didn't check my email sooner but, while I've been unable to sleep more than 20 minutes tonight, I read a book instead of using the computer. Shame on me, eh? :) -----Original Message----- From: Ray [mailto:[EMAIL PROTECTED] Sent: Sunday, December 05, 2004 1:18 AM To: Struts Users Mailing List Subject: Re: Cannot load a validator resource from '/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml' Yep. Sure. Thanks ... :-) ------ MessageResource.properties ------------- # Resources file for STRUTS # Errors errors.header=<font color="red"> errors.footer=</font> # -- validator -- errors.invalid={0} is invalid. errors.maxlength={0} can not be greater than {1} characters. errors.minlength={0} can not be less than {1} characters. errors.range={0} is not in the range {1} through {2}. errors.required={0} is required. errors.byte={0} must be an byte. errors.date={0} is not a date. errors.double={0} must be an double. errors.float={0} must be an float. errors.integer={0} must be a number. errors.long={0} must be an long. errors.short={0} must be an short. errors.creditcard={0} is not a valid credit card number. errors.email={0} is an invalid e-mail address. # -- other -- errors.cancel=Operation cancelled. errors.detail={0} errors.general=The process did not complete. Details should follow. errors.token=Request could not be completed. Operation is not in sequence. errors.login=<br/>password is incorrect errors.name.taken=name already taken errors.page.not.found=page not found errors.could.not.send.email= could not send the email message.<br/>Please contact the school by telephone errors.cannot.delete.home.page=You cannot delete the home page! errors.page.in.use=This page is being used by the page calendar EditForm.title=title EditForm.summary=summary EditForm.orderOfContent=Content order # mail form EmailForm.name=Name EmailForm.address=Address EmailForm.telephoneNumber=Telephone number EmailForm.emailAddress=Email address #Template form TemplateForm.name=Name #Content types form ContentTypesForm.orderOfType=Sequence number ContentTypesForm.typeOfContent=Content name ------ End of MessageResource.properties ------------- ------ validator-rules.xml ------ <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <!-- $Header: C:/cvsrepo/projects/Projects/StarStream/organisation/src/jsp/WEB-INF/validat or-rules.xml,v 1.1 2004/11/22 06:14:47 raymond Exp $ $Revision: 1.1 $ $Date: 2004/11/22 06:14:47 $ This file contains the default Struts Validator pluggable validator definitions. It should be placed somewhere under /WEB-INF and referenced in the struts-config.xml under the plug-in element for the ValidatorPlugIn. <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml"/> </plug-in> These are the default error messages associated with each validator defined in this file. They should be added to your projects ApplicationResources.properties file or you can associate new ones by modifying the pluggable validators msg attributes in this file. # Struts Validator Error Messages errors.required={0} is required. errors.minlength={0} can not be less than {1} characters. errors.maxlength={0} can not be greater than {1} characters. errors.invalid={0} is invalid. errors.byte={0} must be a byte. errors.short={0} must be a short. errors.integer={0} must be an integer. errors.long={0} must be a long. errors.float={0} must be a float. errors.double={0} must be a double. errors.date={0} is not a date. errors.range={0} is not in the range {1} through {2}. errors.creditcard={0} is an invalid credit card number. errors.email={0} is an invalid e-mail address. Note: Starting in Struts 1.2.0 the default javascript definitions have been consolidated to commons-validator. The default can be overridden by supplying a <javascript> element with a CDATA section, just as in struts 1.1. --> <form-validation> <global> <validator name="required" classname="org.apache.struts.validator.FieldChecks" method="validateRequired" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" msg="errors.required"/> <validator name="requiredif" classname="org.apache.struts.validator.FieldChecks" method="validateRequiredIf" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, org.apache.commons.validator.Validator, javax.servlet.http.HttpServletRequest" msg="errors.required"/> <validator name="validwhen" msg="errors.required" classname="org.apache.struts.validator.validwhen.ValidWhen" method="validateValidWhen" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, org.apache.commons.validator.Validator, javax.servlet.http.HttpServletRequest"/> <validator name="minlength" classname="org.apache.struts.validator.FieldChecks" method="validateMinLength" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.minlength" jsFunction="org.apache.commons.validator.javascript.validateMinLength"/> <validator name="maxlength" classname="org.apache.struts.validator.FieldChecks" method="validateMaxLength" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.maxlength" jsFunction="org.apache.commons.validator.javascript.validateMaxLength"/> <validator name="mask" classname="org.apache.struts.validator.FieldChecks" method="validateMask" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.invalid"/> <validator name="byte" classname="org.apache.struts.validator.FieldChecks" method="validateByte" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.byte" jsFunctionName="ByteValidations"/> <validator name="short" classname="org.apache.struts.validator.FieldChecks" method="validateShort" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.short" jsFunctionName="ShortValidations"/> <validator name="integer" classname="org.apache.struts.validator.FieldChecks" method="validateInteger" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.integer" jsFunctionName="IntegerValidations"/> <validator name="long" classname="org.apache.struts.validator.FieldChecks" method="validateLong" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.long"/> <validator name="float" classname="org.apache.struts.validator.FieldChecks" method="validateFloat" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.float" jsFunctionName="FloatValidations"/> <validator name="double" classname="org.apache.struts.validator.FieldChecks" method="validateDouble" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.double"/> <validator name="date" classname="org.apache.struts.validator.FieldChecks" method="validateDate" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.date" jsFunctionName="DateValidations"/> <validator name="intRange" classname="org.apache.struts.validator.FieldChecks" method="validateIntRange" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="integer" msg="errors.range"/> <validator name="floatRange" classname="org.apache.struts.validator.FieldChecks" method="validateFloatRange" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="float" msg="errors.range"/> <validator name="creditCard" classname="org.apache.struts.validator.FieldChecks" method="validateCreditCard" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.creditcard"/> <validator name="email" classname="org.apache.struts.validator.FieldChecks" method="validateEmail" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.email"/> <validator name="url" classname="org.apache.struts.validator.FieldChecks" method="validateUrl" methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, org.apache.struts.action.ActionMessages, javax.servlet.http.HttpServletRequest" depends="" msg="errors.url"/> <!-- This simply allows struts to include the validateUtilities into a page, it should not be used as a validation rule. --> <validator name="includeJavaScriptUtilities" classname="" method="" methodParams="" depends="" msg="" jsFunction="org.apache.commons.validator.javascript.validateUtilities"/> </global> </form-validation> ------ End of validator-rules.xml ------ ------ validation.xml ---- <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd"> <!-- Form validation rules for the Organisation website --> <form-validation> <global> <constant> <constant-name>phone</constant-name> <constant-value>^\(?(\d{3})\)?[-| ]?(\d{3})[-| ]?(\d{4})$</constant-value> </constant> <constant> <constant-name>zip</constant-name> <constant-value>^\d{5}\d*$</constant-value> </constant> <constant> <constant-name>onlineReferenceMask</constant-name> <constant-value>^[a-zA-Z0-9]{2,20}$</constant-value> </constant> </global> <formset> <constant> <constant-name>zip</constant-name> <constant-value>^\d{5}(-\d{4})?$</constant-value> </constant> <form name="EditForm"> <field property="title" depends="required"> <arg key="EditForm.title"/> </field> <field property="summary" depends="required"> <arg key="EditForm.summary"/> </field> <field property="orderOfContent" depends="integer"> <arg key="EditForm.orderOfContent"/> </field> </form> <form name="EmailForm"> <field property="name" depends="required"> <arg key="EmailForm.name"/> </field> <field property="address" depends="required"> <arg key="EmailForm.address"/> </field> <field property="telephoneNumber" depends="required"> <arg key="EmailForm.telephoneNumber"/> </field> <field property="emailAddress" depends="required,email"> <arg key="EmailForm.emailAddress"/> </field> </form> <form name="OptionsForm"> <field property="organisation" depends="required"> <arg key="OptionsForm.organisation"/> </field> <field property="director" depends="required"> <arg key="OptionsForm.director"/> </field> <field property="addressLine1" depends="required"> <arg key="OptionsForm.addressLine1"/> </field> <field property="town" depends="required"> <arg key="OptionsForm.town"/> </field> <field property="county" depends="required"> <arg key="OptionsForm.county"/> </field> <field property="postcode" depends="required"> <arg key="OptionsForm.postcode"/> </field> <field property="telephoneNumber" depends="required"> <arg key="OptionsForm.telephoneNumber"/> </field> <field property="emailAddress" depends="required, email"> <arg key="OptionsForm.emailAddress"/> </field> </form> <form name="ContentTypesForm"> <field property="orderOfType" depends="integer"> <arg key="ContentTypesForm.orderOfType"/> </field> <field property="typeOfContent" depends="required"> <arg key="ContentTypesForm.typeOfContent"/> </field> </form> </formset> </form-validation> ------ end of validation.xml ---- The struts-config.xml header reads: <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> Thanks again; any help is very much appreciated. David G. Friedman wrote: > Ray, > > Can you include your validatoin.xml and validator-rules.xml files plus copy > in the application resources from any files it may be using for messages? > > regards, > David > > -----Original Message----- > From: Ray [mailto:[EMAIL PROTECTED] > Sent: Saturday, December 04, 2004 5:33 AM > To: [EMAIL PROTECTED] > Subject: Cannot load a validator resource from > '/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml' > > > Hi there. > > I've been fighting with a weird problem for a while now. The app I'm > running at home, won't load when I deploy it on my ISPs server. > > The first problem was that Struts refused to load the struts-config.xml > file. I managed to get round it by stripping the DTD definition from the > start of struts-config.xml. Now though, I have another problem; Struts > won't load the validation files. I get the following error when the > application starts up: > > --------------------------------------------------------------- > javax.servlet.UnavailableException: Cannot load a validator resource > from '/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml' > at > org.apache.struts.validator.ValidatorPlugIn.init(ValidatorPlugIn.java:174) > at > org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java: > 839) > at org.apache.struts.action.ActionServlet.init(ActionServlet.java:332) > at javax.servlet.GenericServlet.init(GenericServlet.java:256) > at > org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:93 > 5) > at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:823) > at > org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java: > 3427) > at > org.apache.catalina.core.StandardContext.reload(StandardContext.java:2574) > at > org.apache.catalina.servlets.ManagerServlet.reload(ManagerServlet.java:802) > at > org.apache.catalina.servlets.HTMLManagerServlet.reload(HTMLManagerServlet.ja > va:501) > at > org.apache.catalina.servlets.HTMLManagerServlet.doGet(HTMLManagerServlet.jav > a:151) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application > FilterChain.java:247) > at > org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilter > Chain.java:98) > at > org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain > .java:176) > at java.security.AccessController.doPrivileged(Native Method) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterCh > ain.java:172) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.ja > va:256) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok > eNext(StandardPipeline.java:643) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) > at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.ja > va:191) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok > eNext(StandardPipeline.java:643) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase > .java:551) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok > eNext(StandardPipeline.java:641) > at > org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:2 > 46) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok > eNext(StandardPipeline.java:641) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) > at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at > org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180 > ) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok > eNext(StandardPipeline.java:643) > at > org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve. > java:171) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok > eNext(StandardPipeline.java:641) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163 > ) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok > eNext(StandardPipeline.java:641) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) > at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java > :174) > at > org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invok > eNext(StandardPipeline.java:643) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) > at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) > at > org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:457) > at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:576) > at java.lang.Thread.run(Thread.java:536) > ---------------------------------------------------------------- > > I've tried removing the DTD definitions from validation.xml and > validation-rules.xml, and still no joy. > > Has anyone got any ideas? I'm a bit lost .... > > I'm running Struts Version 1.2.4 --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]