Как внедрить атрибут httpSession в проверку бина? - PullRequest
0 голосов
/ 27 июня 2019

Я использую пользовательскую проверку бинов, но есть исключение, когда я пытаюсь внедрить атрибут сеанса http через CDI в классе валидатора , передавая JPA bean (EclipseLink2.1) в качестве одного из аргументов;но когда я внедряю его в JSF-компонент (Mojarra 2.2), он работает, как и ожидалось.

JPA-компонент (выдержки из кода):

@Entity
@Table(name = "TaxiTrips", catalog = "DIAGE", schema = "gdt")
@XmlRootElement
@JustificativaFunciConstraint
@NamedQueries({...})
public class TaxiTrips implements Serializable {
[...]
}

Управляемый компонент (CDI) (выдержки из кода):

@Named(value = "taxiTripsController")
@ApplicationScoped
public class TaxiTripsController extends AbstractController<TaxiTrips> {

@Inject
@SessionChave
private String httpSessionChave;

private String sessionChave;

public String getSessionChave() {
    return sessionChave;
}

@PostConstruct
public void init() {
    sessionChave = httpSessionChave;
 }
}

Класс ограничения :

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = JustificativaFunciValidator.class)
public @interface JustificativaFunciConstraint {

String message() default "Not allowed, sorry.";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};
}

Класс проверки :

public class JustificativaFunciValidator implements ConstraintValidator<JustificativaFunciConstraint, TaxiTrips> {

@Inject
@SessionChave
private String httpSessionChave;

private String sessionChave;

@Override
public void initialize(JustificativaFunciConstraint constraintAnnotation) {
}

@Override
public boolean isValid(TaxiTrips taxiTrips, ConstraintValidatorContext context) {

    if (httpSessionChave == null) {
        sessionChave = "F0000000";
    } else {
        sessionChave = httpSessionChave;
}
    return taxiTrips.getMatricula().getMatricula().equals(sessionChave);
}

@PostConstruct
public void init() {
    sessionChave = httpSessionChave; //it is not injecting, the value is null here
 }
}

Когда метод редактирования выполняется, запускается исключение ниже:

javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on callback event:'preUpdate'. Please refer to embedded ConstraintViolations for details.

Я исследовал и нашел эти 2 вопроса ( вопрос 1 и вопрос 2 ), но я не знаю, что делать, чтобы решить мою проблему.

Может ли кто-нибудь мне помочь?

...