【问题标题】:cvc-elt.1: Cannot find the declaration of element 'beans'cvc-elt.1:找不到元素“beans”的声明
【发布时间】:2015-02-09 19:00:22
【问题描述】:

我正在尝试获取一个 bean 对象来使用 Spring Security 验证用户登录功能:

    ApplicationContext context = new ClassPathXmlApplicationContext(
            "com/humandevice/drive/fx/util/applicationContext.xml");
    authenticationManager = (AuthenticationManager) context
            .getBean("authenticationManager");

下面是我的applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/security
       http://www.springframework.org/schema/security/spring-security-3.2.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd"
xmlns:context="http://www.springframework.org/schema/context">
<context:component-scan base-package="com.humandevice.drive.fx">
    <context:include-filter type="regex"
        expression="com.humandevice.drive.fx.*" />
</context:component-scan>
<bean id="LoginController" alias="loginController" class="controller.LoginController">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="applicationContext" ref="applicationContext" />
</bean>
<bean id="applicationContext" alias="applicationContext"
    class="org.springframework.context.ApplicationContext;">
</bean>
<authentication-manager alias="authenticationManager">
    <authentication-provider user-service-ref="userService">
        <password-encoder ref="bCryptPasswordEncoder" />
    </authentication-provider>
</authentication-manager>
 </beans>

但我得到了这个例外:

Caused by: org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 64; cvc-elt.1: Cannot find the declaration of element 'beans'.

我很难理解这个问题。


更新

我已经对我的 XML 进行了一些更改:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.2.xsd">

    <import resource="/context-service.xml" />
    <import resource="/context-repository.xml" />

    <context:component-scan base-package="com.humandevice.drive.fx"></context:component-scan>

    <authentication-manager>
        <authentication-provider user-service-ref="com.humandevice.drive.service.user.IUserService">
            <password-encoder ref="bCryptPasswordEncoder" />
        </authentication-provider>
    </authentication-manager>
</beans:beans>

我现在收到这个异常:

lineNumber: 11; columnNumber: 44; cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'import'.

【问题讨论】:

    标签: java spring spring-security


    【解决方案1】:

    您的默认命名空间是http://www.springframework.org/schema/security,并且您配置了xmlns:beans="http://www.springframework.org/schema/beans",这意味着您必须将前缀beans: 添加到http://www.springframework.org/schema/beans 的所有标记形式中,因此您的XML 应如下所示。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns="http://www.springframework.org/schema/security"
           xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/security
           http://www.springframework.org/schema/security/spring-security-3.2.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd"
           xmlns:context="http://www.springframework.org/schema/context">
        <context:component-scan base-package="com.humandevice.drive.fx">
            <context:include-filter type="regex"
                                    expression="com.humandevice.drive.fx.*" />
        </context:component-scan>
        <beans:bean id="LoginController" alias="loginController" class="controller.LoginController">
            <beans:property name="authenticationManager" ref="authenticationManager" />
            <beans:property name="applicationContext" ref="applicationContext" />
        </beans:bean>
        <beans:bean id="applicationContext" alias="applicationContext"
              class="org.springframework.context.ApplicationContext;">
        </beans:bean>
        <authentication-manager alias="authenticationManager">
            <authentication-provider user-service-ref="userService">
                <password-encoder ref="bCryptPasswordEncoder" />
            </authentication-provider>
        </authentication-manager>
    </beans:beans>
    

    【讨论】:

    • 我用你的代码替换了我的代码并删除了alias标签,因为它导致了错误,但现在我得到了这个Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]
    • 你的类路径中有spring-security-config jar吗?
    • 我记得把它添加到 pom.xml 但它不在那里,所以我添加了它。现在我做了一些更改并更新了问题。请看一看。
    • 再来一次!使用&lt;beans:import&gt; 而不是&lt;import&gt;
    【解决方案2】:

    我在尝试创建可执行 jar 时遇到了同样的错误。我有

    ApplicationContext context = new ClassPathXmlApplicationContext("classpath:context.xml");
    

    而不是(注意类路径后的 *)

    ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:context.xml");
    

    【讨论】:

      【解决方案3】:

      我有类似的问题,我想再举一个可能的原因的例子。

      原始.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <beans:beans xmlns="https://www.springframework.org/schema/mvc"
              xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:beans="https://www.springframework.org/schema/beans"
              xmlns:context="https://www.springframework.org/schema/context" xmlns:tx="https://www.springframework.org/schema/tx"
              xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
                  https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
                  https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
                  https://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
      

      工作 .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:context="http://www.springframework.org/schema/context"
          xmlns:tx="http://www.springframework.org/schema/tx"
          xmlns:mvc="http://www.springframework.org/schema/mvc"
          xsi:schemaLocation="http://www.springframework.org/schema/mvc 
          http://www.springframework.org/schema/mvc/spring-mvc.xsd
          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
          http://www.springframework.org/schema/tx 
          http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
      

      解决方案:

      1. 使用xmlns="http://www.springframework.org/schema/beans" 作为基础xmlns。去掉beans:前缀
      2. https 更改为http

      【讨论】:

        【解决方案4】:

        我完全不确定为什么会出现这种奇怪的行为。我也遇到了同样的例外,并遵循Karthikeyan Vaithilingam 的建议。但问题仍然没有解决。所以我已经恢复了我所做的更改并保存了文件。中提琴!!异常消失了,现在没有错误了。

        【讨论】:

          【解决方案5】:

          对我来说,对 applicationContext.xml 的更改并没有在类路径中更新。所以我从类路径中手动删除了 applicationContext.xml 文件并重新构建解决了我的问题的应用程序

          【讨论】:

            【解决方案6】:

            对我来说,我只是在同一个地方剪切、粘贴和保存 XML 文件,它对我有用!!

            【讨论】:

              【解决方案7】:

              此代码将帮助您。

              <?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:context="http://www.springframework.org/schema/context" 
              xmlns:aop="http://www.springframework.org/schema/aop" 
              xsi:schemaLocation="
              http://www.springframework.org/schema/beans 
              classpath:/org/springframework/beans/factory/xml/spring-beans-3.0.xsd 
              http://www.springframework.org/schema/context 
              classpath:/org/springframework/context/config/spring-context-3.0.xsd
              http://www.springframework.org/schema/aop 
              classpath:/org/springframework/aop/config/spring-aop-3.0.xsd
              ">      
              </beans>
              

              【讨论】:

                猜你喜欢
                • 2015-12-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-02-05
                • 2020-05-08
                • 2015-11-25
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多