Page 1 of 1

Apache Struts 7.0: „org.apache.struts2.validator.ValidatorFactory.lookupRegisteredValidatorType(String)“ kann nicht aufg

Posted: 05 Jan 2025, 12:41
by Guest
Ich habe ein funktionierendes Apache Struts 6.0-Kontaktformular, das einen benutzerdefinierten Validator für das Sicherheitscodefeld verwendet. Der benutzerdefinierte Validator funktionierte nach dem Upgrade von Apache Struts 6.0 auf 7.0 nicht mehr. Nach dem Absenden des Formulars ist folgender Fehler aufgetreten:

Code: Select all

Messages:
Cannot invoke "org.apache.struts2.validator.ValidatorFactory.lookupRegisteredValidatorType(String)" because "this.validatorFactory" is null
File:   org/apache/struts2/validator/AnnotationValidationConfigurationBuilder.java
Line number:    620
Entwicklungsumgebungen: Windows 11 Pro, Apache Tomcat 11, Netbeans IDE 21
Hier sind die Dateien in meinem Projekt:
Datei 1: src/main/java/com/mydomain/struts/actions/ContactAction.java

Code: Select all

package com.mydomain.struts.actions;

import org.apache.struts2.ActionSupport;
import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.apache.struts2.validator.annotations.CustomValidator;
import org.apache.struts2.validator.annotations.EmailValidator;
import org.apache.struts2.validator.annotations.RequiredStringValidator;
import org.apache.struts2.validator.annotations.StringLengthFieldValidator;

public class ContactAction extends ActionSupport {

private static final long serialVersionUID = 1L;

private String name, message, email, securityCode;

public String getName() {
return name;
}

@RequiredStringValidator(message = "Name is required.")
@StringLengthFieldValidator(
minLength = "5",
maxLength = "40",
message = "Your name must be from 5 to 40 characters."
)
@StrutsParameter()
public void setName(String name) {
this.name = name;
}

public String getMessage() {
return message;
}

@RequiredStringValidator(message = "Message is required.")
@StringLengthFieldValidator(
minLength = "10",
maxLength = "255",
message = "The message must be from 10 to 255 characters."
)
@StrutsParameter()
public void setMessage(String message) {
this.message = message;
}

public String getEmail() {
return email;
}

@RequiredStringValidator(message = "Email address is required.")
@EmailValidator(
message = "The email address you entered is not valid."
)
@StrutsParameter()
public void setEmail(String email) {
this.email = email;
}

public String getSecurityCode() {
return securityCode;
}

@RequiredStringValidator(message = "Security code is required.")
@CustomValidator(type = "securitycodevalidator")
@StrutsParameter()
public void setSecurityCode(String securityCode) {
this.securityCode = securityCode;
}

@Override
public String execute() {
return SUCCESS;
}

}
Datei 2: src/main/java/com/mydomain/struts/validator/SecurityCodeValidator.java

Code: Select all

package com.mydomain.struts.validator;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.ValidationException;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.validator.validators.FieldValidatorSupport;

public class SecurityCodeValidator extends FieldValidatorSupport {

...

@Override
public void validate(Object o) throws ValidationException {

boolean isSecurityCodeCorrect = validateSecurityCode(...);
if (! isSecurityCodeCorrect) {
addFieldError(getFieldName(), o);
}
}

}
Datei 3: src/main/webapp/WEB-INF/classes/validators.xml

Code: Select all






Datei 4: src/main/webapp/contact.jsp

Code: Select all





Contact Form








Security code:
....