2017-08-12 129 views
0

我試圖創建bean驗證(我正在使用tomcat服務器7)。當我將這段代碼創建名爲'validator'的bean時出錯

@Bean 
public Validator validator() { 
    return new org.springframework.validation.beanvalidation.LocalValidatorFactoryBean(); 
} 

我得到了錯誤

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'validator' defined in Config.SpringConfig: Invocation of init method failed; nested exception is javax.validation.ValidationException: HV000183: Unable to initialize 'javax.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) 
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663) 
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:535) 
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489) 
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) 
at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) 
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1091) 
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) 
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3954) 
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:426) 
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345) 
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530) 
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540) 
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540) 
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519) 
at java.lang.Thread.run(Thread.java:745) 

我已經看過了所有的同樣的問題,並添加所需的依賴如下:

<dependency org="javax.el" name="el-api" rev="2.2.1-b04" conf="compile->default"/> 
    <dependency org="org.apache.tomcat" name="tomcat-el-api" rev="8.5.14" conf="compile->default"/> 
    <dependency org="org.apache.tomcat" name="tomcat-jasper-el" rev="8.5.14" conf="compile->default"/> 
    <dependency org="javax.validation" name="validation-api" rev="2.0.0.Final" conf="compile->default"/> 
    <dependency org="org.hibernate" name="hibernate-validator" rev="6.0.0.CR2" conf="compile->default"/> 

但問題仍然發生。

請幫助我, 非常感謝

回答

0

檢查,如果你不具備javax.el 2個不同的版本不兼容。嘗試生成依賴樹來查看衝突。

例如:

<dependency org="javax.el" name="el-api" rev="2.2.1-b04" conf="compile->default"/> 
<dependency org="org.apache.tomcat" name="tomcat-el-api" rev="8.5.14" conf="compile->default"/> 
<dependency org="org.apache.tomcat" name="tomcat-jasper-el" rev="8.5.14" conf="compile->default"/> 

可以提供不同版本的API。

嘗試刪除javax.el也。

+0

我試圖同時刪除javax.el但它好好嘗試的工作。 :( – nptn

+0

Chcek如果依賴關係提供了不同版本的javax.el和javax.validation(spring,tomcat,hibernate)並調整這些依賴關係 – Athlan

+0

哦,非常感謝所以我使用的是Tomcat 7,我應該從哪個版本開始? – nptn

0

您可以查看Hibernate Validator的getting started頁面。看起來您正在嘗試使用HV 6.0,它取決於javax-el的3.0版本(如果您使用EL進行消息插值)。你正在添加2.2版本。所以這可能是你看到這個錯誤的原因。還有一個最終版本的HV 6.0發佈,所以你可以使用它來代替CR2。

它應該是足有:

<dependency org="org.glassfish" name="javax.el" rev="3.0.1-b08" conf="compile->default"/> 
<dependency org="org.hibernate" name="hibernate-validator" rev="6.0.1.Final" conf="compile->default"/> 
+0

非常感謝,我會嘗試一下 – nptn

+0

我改變了它,並收到此錯誤: 在類org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration中定義的名稱爲'requestMappingHandlerAdapter'的bean時出錯錯誤:通過工廠實例化Bean方法失敗 – nptn

+0

很難說這麼少的信息有什麼問題,我假設你提到的錯誤是頂級錯誤,如果是這樣,應該有一個原因爲什麼它沒有創建該bean ... –

相關問題