2012-07-06 64 views
2

我使用使用javax.validation API和Spring 3.1.1

  • 春3.3.1
  • 的WebLogic11克
  • JDK 1.60_29

我決定要做基於Java的表單驗證。當我去編譯我的代碼時,看到我需要javax.validation庫。於是,我把這些標籤在我的pom.xml:

<dependency> 
    <groupId>javax.validation</groupId> 
    <artifactId>validation-api</artifactId> 
    <version>1.0.CR5</version> 
</dependency> 

,我得到了這一個額外的jar:

validation-api-1.0.CR5.jar 

我把到我的戰爭/ WEB-INF/lib目錄

我啓動了的WebLogic 11g和春天咳出血:

[ERROR] - 2012-Jul-06 12:31:13 - servlet.DispatcherServlet:initServletBean(): Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0': Invocation of init method failed; nested exception is javax.validation.ValidationException: Unable to find a default provider 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:283) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
    at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:64) 
    at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58) 
    at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48) 
    at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:539) 
    at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1981) 
    at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1955) 
    at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1874) 
    at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3154) 
    at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1518) 
    at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:484) 
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52) 
    at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119) 
    at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200) 
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247) 
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52) 
    at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119) 
    at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27) 
    at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:671) 
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52) 
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:212) 
    at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:44) 
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161) 
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79) 
    at weblogic.deploy.internal.targetserver.BasicDeployment.activate(BasicDeployment.java:184) 
    at weblogic.deploy.internal.targetserver.BasicDeployment.activateFromServerLifecycle(BasicDeployment.java:361) 
    at weblogic.management.deploy.internal.DeploymentAdapter$1.doActivate(DeploymentAdapter.java:51) 
    at weblogic.management.deploy.internal.DeploymentAdapter.activate(DeploymentAdapter.java:200) 
    at weblogic.management.deploy.internal.AppTransition$2.transitionApp(AppTransition.java:30) 
    at weblogic.management.deploy.internal.ConfiguredDeployments.transitionApps(ConfiguredDeployments.java:240) 
    at weblogic.management.deploy.internal.ConfiguredDeployments.activate(ConfiguredDeployments.java:169) 
    at weblogic.management.deploy.internal.ConfiguredDeployments.deploy(ConfiguredDeployments.java:123) 
    at weblogic.management.deploy.internal.DeploymentServerService.resume(DeploymentServerService.java:180) 
    at weblogic.management.deploy.internal.DeploymentServerService.start(DeploymentServerService.java:96) 
    at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64) 
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256) 
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221) 
Caused by: javax.validation.ValidationException: Unable to find a default provider 
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:265) 
    at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:184) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
    ... 57 more 

周圍的Googling我一直看到javax.validation API與HIBE提到rnate。考慮到這個錯誤消息,我猜測我需要hibernate來提供一些東西,所以我在我的war/WEB-INF/lib中添加了一個hibernate jar,但是這導致了更多的錯誤。

關於如何讓Spring 3.1.1和javax.validation API發揮出色的任何想法?

感謝很多提前

史蒂夫

+0

[Spring MVC 3驗證 - 無法找到默認提供程序]的可能重複(http://stackoverflow.com/questions/2231100/spring-mvc-3-validation-unable-to-find-a-default-提供商) – 2013-01-01 15:45:52

回答

3

的Weblogic 11G是Java EE 5的兼容,因此沒有實現JSR-303,javax.validation,規格,並加入如​​Java EE 6的一部分,因此,您必須添加一個默認提供這一點,如Hibernate Validator

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-validator</artifactId> 
    <version>4.3.0.Final</version> 
</dependency> 

另外,如果升級到Java EE 6兼容的應用服務器,這種依賴性可以忽略,因爲它已經包含在內。

順便說一下,你可能要考慮更新你的javax.validation依賴版本到版本1.0.0.GA

+0

謝謝。我仍然很難弄清楚我需要哪些maven標籤。這改正了這個問題。 – Steve 2012-07-06 21:38:50