【发布时间】:2013-02-19 12:53:48
【问题描述】:
我在我的应用程序中使用 bean 验证。当没有约束验证错误时,一切都很好。每次出现验证错误时,Glassfish 都会抛出以下异常:
Caused by: java.lang.ClassNotFoundException: javax.validation.groups.Default: java.net.MalformedURLException: Unknown protocol: osgi
at com.sun.corba.ee.impl.util.JDKBridge.loadClassM(JDKBridge.java:325)
at com.sun.corba.ee.impl.util.JDKBridge.loadClass(JDKBridge.java:228)
at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.loadClass(Util.java:640)
at com.sun.corba.ee.impl.util.RepositoryId.getClassFromType(RepositoryId.java:628)
at com.sun.corba.ee.impl.orbutil.RepIdDelegator.getClassFromType(RepIdDelegator.java:169)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readClass(CDRInputStream_1_0.java:1439)
bean-validation.jar 存在于 glassfish/modules 文件夹中。启动不会抛出任何关于验证的异常。
PS。请注意,我们将远程 bean 与 CORBA 一起使用。
可在 GlassFish 3.1.2.2 和 3.1.1 上重现。
【问题讨论】:
-
我将此问题追溯到通过 CORBA 对 ConstraintValidationException 的序列化。不知何故,osgi 没有正确加载 bean-validation 模块,并且缺少 javax.validation.groups.Default 类。我做了一个快速的解决方法,以便拦截 ConstraintValidationException 并且永远不会通过 CORBA 发送。相反,验证错误信息被收集在一个自定义的异常类中,该类实际上可以通过服务进行序列化。
-
您能否提供一些信息,因为我有同样的错误,您是如何拦截该消息的。使用我的 dao 我知道什么时候会发生违规,但使用拦截器会更好。
-
我不再能够访问或提供我使用的代码,但基本上我只是创建了一个拦截器,它在适当的层捕获 ConstraintValidationExceptions 并将它们作为我自己的自定义异常抛出,然后通过正确序列化科尔巴。
标签: glassfish bean-validation corba