我最近更新了一个测试服务器以使用Glassfish 4.1。在此更新后,我遇到了将Web Services部署到Glassfish的问题。部署应用程序时,我收到消息“部署期间发生错误:加载应用程序时出现异常:java.lang.ClassNotFoundException:org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor”(请参阅下面的完整堆栈跟踪)。
我原本以为这个问题围绕着我们使用的自定义Guava jar(添加了一个beans.xml来规避兼容性问题)。我使用最新的Guava版本(18)重新构建了应用程序,并且仍然遇到了部署到Glassfish 4.1的相同问题。使用最新的Guava版本将应用程序部署到Glassfish 4.0没有问题。
[2014-09-23T10:15:37.589-0600] [glassfish 4.1] [SEVERE] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=177 _ThreadName=admin-listener(25)] [timeMillis: 14114
88937589] [levelValue: 1000] [[
Exception while invoking class org.glassfish.ejb.startup.EjbApplication start method
java.lang.RuntimeException: java.lang.ClassNotFoundException: org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor
at com.sun.ejb.containers.BaseContainer.setStartedState(BaseContainer.java:962)
at org.glassfish.ejb.startup.EjbApplication.markAllContainersAsStarted(EjbApplication.java:140)
at org.glassfish.ejb.startup.EjbApplication.start(EjbApplication.java:152)
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291)
at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:500)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
....
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.ClassNotFoundException: org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1783)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1633)
at com.sun.ejb.containers.interceptors.InterceptorManager.buildEjbInterceptorChain(InterceptorManager.java:431)
at com.sun.ejb.containers.interceptors.InterceptorManager.<init>(InterceptorManager.java:131)
at com.sun.ejb.containers.BaseContainer.initializeInterceptorManager(BaseContainer.java:3396)
at com.sun.ejb.containers.BaseContainer.setStartedState(BaseContainer.java:950)
... 83 more
答案 0 :(得分:1)
这似乎是一个错误:
https://java.net/jira/browse/HK2-233 https://java.net/jira/browse/JERSEY-2661
不幸的是,Oracle并没有发布GlassFish补丁,只发布了主要版本(AFAIK)。另一种方法是使用the GlassFish fork "Payara"。
您可以应用此标准符合性解决方法:
private <T> boolean beanIsValid(final T bean) {
final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
final Set<ConstraintViolation<T>> constraintViolations = validator.validate(bean);
return constraintViolations.isEmpty();
}
答案 1 :(得分:0)
我在做一些老练习时遇到了完全相同的问题。我只是使用Glassfish 4.1.2,它为我解决了这个问题。
https://download.java.net/glassfish/4.1.2/release/glassfish-4.1.2.zip