プラットフォーム: JBoss AS 7。
JSR 303 Bean 検証と要求スコープの CDI マネージド Bean で奇妙な動作が見られます。システムは検証ルールを適用していないようで、常に検証に合格します。
以下はコードスニペットです。
@Named
@RequestScoped
class Person {
@Size(min=3, max=25, message="Please enter a valid name")
private String firstName;
//Getters and setters...
}
@WebServlet("/ValidationTest")
public class ValidationTest extends HttpServlet {
@Inject
Person p1;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
p1.setFirstName("A");
validate(p1);
Person p2 = new Person();
p2.setFirstName("B");
validate(p2);
}
public void validate(Object o) {
ValidatorFactory validatorFactory = null;
validatorFactory = Validation.buildDefaultValidatorFactory();
ValidatorContext validatorContext = validatorFactory.usingContext();
javax.validation.Validator beanValidator = validatorContext
.getValidator();
Set<ConstraintViolation<Object>> violations = beanValidator.validate(o);
System.out.println("Object is valid: " + violations.isEmpty());
}
}
これからの出力は次のとおりです。
Object is valid: true
Object is valid: false
注入された Bean p1 は有効であると見なされますが、これは発生すべきではありません。p2 の検証が失敗しますが、これは予想どおりです。Person Bean の依存スコープを作成すると、p1 は正しく無効であると見なされます。私は何を間違っていますか?
編集: TomEE で動作を複製しました。だから、私は何か間違ったことをしているに違いない。