【问题标题】:Need to make a simple spring 3 example work需要做一个简单的spring 3示例工作
【发布时间】:2014-07-23 17:36:47
【问题描述】:

我正在从一本书中学习 spring 3,但我在第一个示例中遇到了异常。下面给出。 我的项目可以从链接下载为 zip 文件 - https://github.com/double-whammy/prospring3.git

我的环境——Eclipse STS(Eclipse for Spring)

例外:

INFO t.support.ClassPathXmlApplicationContext: 456 - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@497e4b: startup date [Wed Jul 23 10:05:47 PDT 2014]; 
root of context hierarchy
INFO eans.factory.xml.XmlBeanDefinitionReader: 315 - Loading XML bean definitions from class path resource [META-INF/spring/app-context.xml]

Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 13 in XML document from class path resource [META-INF/spring/app-context.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 13; columnNumber: 38; The prefix "p" for attribute "p:messageProvider-ref" associated with an element type "bean" is not bound.
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.apress.prospring3.ch2.HelloWorldSpringDI.main(HelloWorldSpringDI.java:9)
Caused by: org.xml.sax.SAXParseException; lineNumber: 13; columnNumber: 38; The prefix "p" for attribute "p:messageProvider-ref" associated with an element type "bean" is not bound.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388)
    ... 14 more

Spring XML 应用程序配置 xml 文件:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
<bean id="provider" class="com.apress.prospring3.ch2.HelloWorldMessageProvider"/> 
<bean id="renderer" class="com.apress.prospring3.ch2.StandardOutMessageRenderer" 
p:messageProvider-ref="provider"/> 
</beans>

【问题讨论】:

    标签: eclipse spring


    【解决方案1】:

    这是因为你的xml无效:

    标题有错误:xsi 属性值需要双引号!

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    

    <bean id="renderer" class="com.apress.prospring3.ch2.StandardOutMessageRenderer" p:messageProvider-ref="provider"/>

    我不知道您要配置什么,但是将p:messageProvider-ref 作为属性是无效的xml。

    我想你想表达类似 StandardOutMessageRenderer 类型的 bean renderer 的东西,它使用 bean provider 作为其 MessageProvider

    &lt;bean id="provider" class="com.apress.prospring3.ch2.HelloWorldMessageProvider"/&gt; &lt;bean id="renderer" class="com.apress.prospring3.ch2.StandardOutMessageRenderer"&gt;&lt;property name="messageProvider" ref="provider"/&gt;&lt;/bean&gt;

    【讨论】:

    • 我也是这么想的,但后来我用谷歌快速搜索了一下,它看起来是合法的
    • @dimoniy:我发布了我会如何写它
    • 我做了你建议的改变。新的例外是 - Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 3 in XML document from class path resource [META-INF/spring/app-context.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 12; Open quote is expected for attribute "{1}" associated with an element type "xmlns:xsi".
    • &lt;bean id="renderer" class="com.apress.prospring3.ch2.StandardOutMessageRenderer" p:messageProvider-ref="provider"/&gt; 无效?所以,我的书在开头一章本身就错了。
    • @james: 发现 - SAX 解析器是正确的,第 3 行是问题
    【解决方案2】:

    您不能使用:p:messageProvider-ref="provider",它是在 spring 2.5 中

    使用这个:

    <bean id="renderer" class="com.appress.prospring3.ch2.StandardOutMessageRenderer">      
            <property name="messageProvider" ref="provider"></property>
    </bean>
    

    【讨论】:

      【解决方案3】:

      错误是因为 xmlns:xsi 的值周围没有引号。 更正 - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Pro spring 3 书很烂。

      完整的xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
          xmlns:context="http://www.springframework.org/schema/context"
          xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd">
          <bean id="provider" class="com.apress.prospring3.ch2.HelloWorldMessageProvider" />
          <bean id="renderer" class="com.apress.prospring3.ch2.StandardOutMessageRenderer"
              p:messageProvider-ref="provider" />
      

      【讨论】:

        【解决方案4】:

        您遇到的问题与 maven 仅从所有不同的 spring jar 中选择一个 spring.handlers 文件这一事实有关。

        要解决此问题,请使用以下链接: http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#Merging_Content_of_Specific_Files_with_AppendingTransformer_and_XmlAppendingTransformer

        请注意,您必须使用 maven 程序集插件。

        此处解释了与您的类似问题: http://blog.idm.fr/2009/09/maven-assembly-plugin-and-spring-namespace-handlers.html

        【讨论】:

          猜你喜欢
          • 2013-05-24
          • 2011-09-03
          • 2023-03-25
          • 2011-10-26
          • 2011-11-17
          • 1970-01-01
          • 2014-07-12
          • 1970-01-01
          相关资源
          最近更新 更多