我按照gwt 2.4验证样本并将整个内容实现到我自己的应用程序中。客户端运作良好。
private void verifyRegistrationData(final RegistrationTO registration) throws ConstraintViolationException {
final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
final Set<ConstraintViolation<RegistrationTO>> violations = validator.validate(registration);
if (violations.size() > 0) {
final Set<ConstraintViolation<?>> temp = new HashSet<ConstraintViolation<?>>(violations);
throw new ConstraintViolationException(temp);
...
但是如果我在服务器端做同样的事情:
public void update(final RegistrationTO registration) throws IllegalArgumentException, ConstraintViolationException, TestException {
final Set<ConstraintViolation<RegistrationTO>> violations = validator.validate(registration);
if (!violations.isEmpty()) {
final Set<ConstraintViolation<?>> temp = new HashSet<ConstraintViolation<?>>(violations);
throw new ConstraintViolationException(temp);
}
...
整个事情崩溃,但有以下例外:
javax.servlet.ServletContext log:调度传入的RPC调用时发生异常
com.google.gwt.user.client.rpc.SerializationException:类型'org.hibernate.validator.engine.PathImpl'未包含在可由此SerializationPolicy序列化的类型集中,或者无法加载其Class对象。出于安全考虑,此类型不会被序列化。
这就是PathImpl看起来像hibernate-validator-4.1.0.Final-sources.jar
public class PathImpl implements Path, Serializable {
private static final long serialVersionUID = 7564511574909882392L;
...
看起来不错(至少对我而言)
我正在使用GWT 2.4,validation-api-1.0.0.GA,hibernate-validator-4.1.0.Final,gwt-servlet-deps ......
提前致谢!
答案 0 :(得分:2)
是否有明确定义的默认构造函数?即,
public PathImpl() { }
?这是GWT序列化机制所要求的;如果它不在源中,则序列化RPC响应将失败。
答案 1 :(得分:1)
PathImpl
确实存在自定义序列化程序,只是除非在您的服务API中明确引用该类,否则它不会被添加到序列化策略中。
目前的解决方法是在服务API的某处添加一个虚拟PathImpl
字段。 ValidationSupport
类存在于将此类和其他类别组合在一起以使其更容易。
答案 2 :(得分:0)
我将整个事情改为RequestFactory,正如Thomas Broyer所推荐的那样。到目前为止,它并不像GWT-RPC那么容易。这就是我收集所有信息并构建示例程序的原因。
对于那些感兴趣的人 - here,您可以找到包含文档和来源的样本。 (也实现了单行客户端记录器)(文档是德语,但是日志输出aso。是英文...)