問題收集

 問題一:

javax.validation.ValidationException: Unable to create a Configuration

錯誤信息:

[plain] view plain copy
  1. [org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean]-Failed to set up a Bean Validation provider  
  2. javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.  
  3.     at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:271)  
  4.     at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:223)  
  5.     at org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean.afterPropertiesSet(OptionalValidatorFactoryBean.java:40)  
  6.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)  
  7.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)  
  8.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)  
  9.     at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)  
  10.     at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)  
  11.     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)  
  12.     at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)  
  13.     at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)  
  14.     at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)  
  15.     at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)  
  16.     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)  
  17.     at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)  
  18.     at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)  
  19.     at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)  
  20.     at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)  
  21.     at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)  
  22.     at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)  
  23.     at javax.servlet.GenericServlet.init(GenericServlet.java:158)  
  24.     at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1227)  
  25.     at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1140)  
  26.     at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1027)  
  27.     at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5038)  
  28.     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5348)  
  29.     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)  
  30.     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)  
  31.     at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)  
  32.     at java.util.concurrent.FutureTask.run(FutureTask.java:266)  
  33.     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)  
  34.     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)  
  35.     at java.lang.Thread.run(Thread.java:745)  

Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.

無法創建配置,因爲找不到bean驗證提供程序。添加一個提供者像Hibernate Validator(RI)到您的類路徑。

這個錯誤是不影響項目運行的。是因爲我修改了日誌輸出級別纔看到這個錯誤,不然的話都看不到這個錯誤。

解決方法:

解決這個問題首先要了解一些概念!

JSRs: Java Specification Requests 即Java規範要求
它是Java標準化組織(Java Community Process)提交給sun的java開發草案。
對於實時應用都有對應的JSR,比如現在幾乎不用的EJB,以前都有對應的JSR,它是一種對應應用的開發標準草案。即它都是對應現在的每個Java應用的,是一些工業標準。

JSR 303 - Bean Validation

JSR 303 – Bean Validation 是一個數據驗證的規範,2009 年 11 月確定最終方案。2009 年 12 月 Java EE 6 發佈,Bean Validation 作爲一個重要特性被包含其中。本文將對 Bean Validation 的主要功能進行介紹,並通過一些示例來演示如何在 Java 開發過程正確的使用 Bean Validation。

關於 Bean Validation

在任何時候,當你要處理一個應用程序的業務邏輯,數據校驗是你必須要考慮和麪對的事情。應用程序必須通過某種手段來確保輸入進來的數據從語義上來講是正確的。在通常的情況下,應用程序是分層的,不同的層由不同的開發人員來完成。很多時候同樣的數據驗證邏輯會出現在不同的層,這樣就會導致代碼冗餘和一些管理的問題,比如說語義的一致性等。爲了避免這樣的情況發生,最好是將驗證邏輯與相應的域模型進行綁定。

Bean Validation 爲 JavaBean 驗證定義了相應的元數據模型和 API。缺省的元數據是 Java Annotations,通過使用 XML 可以對原有的元數據信息進行覆蓋和擴展。在應用程序中,通過使用 Bean Validation 或是你自己定義的 constraint,例如 @NotNull@Max@ZipCode, 就可以確保數據模型(JavaBean)的正確性。constraint 可以附加到字段,getter 方法,類或者接口上面。對於一些特定的需求,用戶可以很容易的開發定製化的 constraint。Bean Validation 是一個運行時的數據驗證框架,在驗證之後驗證的錯誤信息會被馬上返回。

下載 JSR 303 – Bean Validation 規範 http://jcp.org/en/jsr/detail?id=303

Hibernate Validator 是 Bean Validation 的參考實現 . Hibernate Validator 提供了 JSR 303 規範中所有內置 constraint 的實現,除此之外還有一些附加的 constraint。如果想了解更多有關 Hibernate Validator 的信息,請查看 http://www.hibernate.org/subprojects/validator.html

參考IBM的一篇不錯的文章:https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/

添加jsr303-validation包或者添加maven包的依賴

[html] view plain copy
  1. <dependency>  
  2. <groupId>org.apache.bval</groupId>  
  3. <artifactId>bval-jsr303</artifactId>  
  4. <version>0.5</version>  
  5. </dependency>  

所以我添加了包依賴,更新項目,重新啓動,卻出現了新的錯誤,出錯不要緊,影響項目的正常運行和使用了。

經過一番查找,瞭解到大概是版本兼容性問題,既然它最初的提示中推薦使用Hibernate Validator(RI),我就換個試試吧,

添加Hibernate Validator依賴:

[html] view plain copy
  1. <dependency>  
  2.     <groupId>org.hibernate</groupId>  
  3.     <artifactId>hibernate-validator</artifactId>  
  4.     <version>5.2.4.Final</version>  
  5. </dependency>  

 再重新編譯發佈,問題解決了。



問題二:

在使用eclipse創建maven web項目時,點Finish後報了Could not resolve archetype的問題。

Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp:1.0 from any of the configured repositories.
Could not resolve artifact org.apache.maven.archetypes:maven-archetype-webapp:pom:1.0
Failure to transfer org.apache.maven.archetypes:maven-archetype-webapp:pom:1.0 from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.apache.maven.archetypes:maven-archetype-webapp:pom:1.0 from/to central (https://repo.maven.apache.org/maven2): repo.maven.apache.org
Failure to transfer org.apache.maven.archetypes:maven-archetype-webapp:pom:1.0 from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact org.apache.maven.archetypes:maven-archetype-webapp:pom:1.0 from/to central (https://repo.maven.apache.org/maven2): repo.maven.apache.org

解決方法:

先在CMD中執行mvn help:system命令行,執行後會下載很多東西,等待下載結束。

命令行執行:mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false?

此時會下載所需要的項目jar包,等待下載完畢就可以創建項目了。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章