错误消息" cvc-complex-type.4:属性' bean-discovery-mode'必须出现在元素' bean'。"

时间:2014-11-01 05:19:01

标签: java-ee jboss cdi

我有一个简单的Java EE项目,在WEB-INF下有一个简单的beans.xml。它基本上什么都没有。但是我总是得到这个错误信息" cvc-complex-type.4:Attribute' bean-discovery-mode'必须出现在元素' bean'。"表示行#34; http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"在JBoss Developer Studio中。

这条消息是什么意思?我用谷歌搜索但没有发现任何东西。什么可能导致这个?

<?xml version="1.0" encoding="UTF-8"?>
<!-- Marker file indicating CDI should be enabled -->
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://xmlns.jcp.org/xml/ns/javaee
        http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd">

    <!-- Uncomment this alternative to see EJB declarative transactions in 
        use -->
    <!-- <alternatives> -->
        <!-- <class>org.jboss.as.quickstarts.greeter.domain.EJBUserDao</class> -->
    <!-- </alternatives> -->
</beans>

1 个答案:

答案 0 :(得分:3)

该消息清楚地表明属性bean-discovery-mode应该在元素beans中,这可能是您的容器的要求。尝试将属性赋予bean元素,如下所示:

bean-discovery-mode = "annotated"

原因是您使用的是CDI 1.1,因此bean-discovery-mode是强制属性。您可以通过阅读以下URL中提供的XSD文件来确认它:

http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd

特别注意以下部分:

<xs:attribute name="bean-discovery-mode" use="required">
            <xs:annotation>
                <xs:documentation>
                   It is strongly recommended you use "annotated". 

                   If the bean discovery mode is "all", then all types in this
                   archive will be considered. If the bean discovery mode is
                   "annotated", then only those types with bean defining annotations will be
                   considered. If the bean discovery mode is "none", then no
                   types will be considered.
                </xs:documentation>
            </xs:annotation>