2012-11-05 95 views
2

當我試圖用我的maven build(如下所示)啓動tomcat時,我感到困惑。對於某些情況下,我正在將一箇舊應用程序轉換爲Maven項目。我運行時出現錯誤:「bean名稱不能爲空」的bean bean名稱上的錯誤

mvn tomcat:run-war 

該項目生成良好,但在解析服務器啓動時的applicationContext文件時爆炸。 applicationContext-main.xml(如下所示)包含對applicationContext-foo.xml和applicationContext.shared.xml中定義的bean的引用。

applicationContext文件在非maven應用程序中按預期工作,並且這是applicationContext文件的直接副本。

我試過一些調試,發現其他應用程序上下文文件的外部引用正在解析正常,添加名稱屬性導致:名稱爲「cacheManager」的bean已經在此文件中定義,交換名稱屬性的id導致相同的「bean名稱不能爲空錯誤」,並使構造函數arg爲空映射導致相同的錯誤。

我很困惑。我遇到了這個報告相同錯誤的post,並且是由在bean上設置的前綴引起的。我不知道在我的情況下設置了任何前綴。

有關如何解決此問題的任何想法?提前致謝。

Nov 05, 2012 3:10:11 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [com/xactsites/shared/applicationContext-shared.xml] 
Nov 05, 2012 3:10:11 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [com/xactsites/foo/applicationContext-foo.xml] 
Nov 05, 2012 3:10:11 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [com/xactsites/help/applicationContext-help.xml] 
Nov 05, 2012 3:10:11 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/classes/applicationContext-main.xml] 
Nov 05, 2012 3:10:11 PM org.springframework.web.context.ContextLoader initWebApplicationContext 
SEVERE: Context initialization failed 
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unexpected failure during bean definition parsing 
Offending resource: ServletContext resource [/WEB-INF/classes/applicationContext-main.xml] 
Bean 'cacheManager'; nested exception is java.lang.IllegalArgumentException: Bean name must not be empty 
Caused by: java.lang.IllegalArgumentException: Bean name must not be empty 
    at org.springframework.util.Assert.hasText(Assert.java:161) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:305) 
    at org.springframework.beans.factory.xml.UtilNamespaceHandler$MapBeanDefinitionParser.parse(UtilNamespaceHandler.java:163) 
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:78) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1147) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseNestedCustomElement(BeanDefinitionParserDelegate.java:1185) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parsePropertySubElement(BeanDefinitionParserDelegate.java:844) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parsePropertySubElement(BeanDefinitionParserDelegate.java:832) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parsePropertyValue(BeanDefinitionParserDelegate.java:828) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseConstructorArgElement(BeanDefinitionParserDelegate.java:734) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseConstructorArgElements(BeanDefinitionParserDelegate.java:641) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:563) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:421) 
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseBeanDefinitionElement(BeanDefinitionParserDelegate.java:390) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:165) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:142) 
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:89) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:499) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:407) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:357) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:126) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:142) 
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:123) 
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:91) 
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:94) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:294) 
    at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:156) 
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445) 
    at org.apache.catalina.startup.Embedded.start(Embedded.java:825) 
    at org.codehaus.mojo.tomcat.AbstractRunMojo.startContainer(AbstractRunMojo.java:558) 
    at org.codehaus.mojo.tomcat.AbstractRunMojo.execute(AbstractRunMojo.java:255) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 

的applicationContext-main.xml中

... 
<bean id="cacheManager" class="com.foo.bar.commons.caching.MainCacheManager"> 
    <constructor-arg> 
     <util:map> 
      <entry key="RIGHTS_CACHES"> 
       <util:list value-type="com.foo.bar.commons.caching.MainCache"> 
        <ref bean="aCache" /> 
        <ref bean="gRepository" /> 
        <ref bean="gRCache" /> 
        <ref bean="uRCache" /> 
        <ref bean="userService" /> 
        <ref bean="vUService" /> 
        <ref bean="rIService" /> 
       </util:list> 
      </entry> 
      <entry key="RULES_CACHES"> 
       <util:list value-type="com.foo.bar.commons.caching.MainCache"> 
        <ref bean="gBRService" /> 
       </util:list> 
      </entry> 
     </util:map> 
    </constructor-arg> 
</bean> 
... 

回答

4

所有examples in the official documentation似乎使用id=""屬性,檢查了這一點:

<util:map id="caches"> 
    <entry key="RIGHTS_CACHES"> 
     <util:list id="rightsCaches" value-type="com.foo.bar.commons.caching.MainCache"> 
      <ref bean="aCache" /> 
      <!-- ... --> 
     </util:list> 
    </entry> 
    <entry key="RULES_CACHES"> 
     <util:list id="rulesCaches" value-type="com.foo.bar.commons.caching.MainCache"> 
      <ref bean="gBRService" /> 
     </util:list> 
    </entry> 
</util:map> 

,並考慮使用Java的@Configuration,更容易閱讀和維護比XML。

+0

我很好奇,爲什麼這個行爲在我的舊代碼中表現不同(工作時沒有id)。有任何想法嗎?我收到其他錯誤,並孤立任務(避免範圍蔓延)我想只是讓代碼正常工作。 – Noremac

+0

@Noremac:不知道,也許你正在使用'util:list'等舊的(非命名空間)替代方法 - 或者代碼沒有改動? –

+0

好吧,我找到了罪魁禍首。我們的應用程序(jcaptcha-all)存在一個依賴項,它在它的pom文件中聲明瞭對Spring 2.0的依賴。一旦我對此做了排除,事情就開始像以前一樣工作了(在Spring 3.1.0上)。 – Noremac

相關問題