在Weld 3启动时发出警告,其中XSD无效beans.xml用于焊接:扫描标记

时间:2017-09-15 11:44:20

标签: cdi weld weld-se cdi-2.0

我刚刚将Weld从版本2.4.4更新为3.0.1。我在应用程序启动时遇到以下错误,我找不到解决方案。我正在使用Weld SE。

Sep 15, 2017 1:25:12 PM org.jboss.weld.xml.BeansXmlHandler error
WARN: WELD-001208: Error when validating file:/(...)/META-INF/beans.xml@7 against xsd. cvc-complex-type.2.4.a: Invalid content was found starting with element 'weld:scan'. One of '{"http://xmlns.jcp.org/xml/ns/javaee":interceptors, "http://xmlns.jcp.org/xml/ns/javaee":decorators, "http://xmlns.jcp.org/xml/ns/javaee":alternatives, "http://xmlns.jcp.org/xml/ns/javaee":scan, "http://xmlns.jcp.org/xml/ns/javaee":trim}' is expected.

beans.xml包含一个Weld特定标记,用于在扫描中包含一些类(因为CDI规范仅支持排除)。

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:weld="http://jboss.org/schema/weld/beans"
       xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
        http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="all">
    <weld:scan>
        <weld:include name="com.company.mypackage"/>
        (...)
    </weld:scan>
</beans>

我使用以下Maven Weld SE依赖。

<dependency>
    <groupId>org.jboss.weld.se</groupId>
    <artifactId>weld-se-core</artifactId>
    <version>3.0.1.Final</version>
</dependency>

你能告诉我怎么办才能解决这个问题吗?我已经检查了CDI 2.0 XSD,但我还没有找到。也许,CDI本身支持扫描的包含限制?或者Weld XSD可能已经改变了?

我已在bug tracker of Weld上创建了一张票,以防它出现错误。

3 个答案:

答案 0 :(得分:1)

发现问题 - 我试图在JIRA issue for CDI (CDI-717)中进行描述。

但总结一下,它不是焊接问题,而是CDI 2.0 XSD验证文件的问题。 有一条线被删除了意外的变化。 此行允许任何实现(例如Weld)添加其他元素(来自不同的命名空间)并仍然通过XSD验证。

只是为了完整性,可以看到前一个XSD文件here (with the link to missing line)。 然后新的here

BTW即使使用这些验证警告/错误,您也可以安全地运行您的应用程序。 Weld会注意到它们,但应该能够处理它们并仍然运行您的应用程序。

答案 1 :(得分:0)

我以前无法看到你的问题。我可以确认Weld 3仍然支持weld:scan,但我不确定(假设您正在使用SE?),您的部署模型将支持它。

我使用了这种格式,并且我没有收到您的错误(但我确实使用您的文件得到了奇怪的IDE警告)所以这可能会解决它吗?

<beans xmlns:weld="http://jboss.org/schema/weld/beans" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="2.0" bean-discovery-mode="all"> <weld:scan> <weld:include name="org.glassfish.jersey.weld.se.WeldRequestScope"/> </weld:scan> </beans>

请注意,您还应使用CDI 2.0的功能确认您使用适用于Jersey的正确版本 - https://github.com/jersey/jersey/tree/master/ext/cdi/jersey-weld2-se

答案 2 :(得分:-1)

XML正在针对CDI进行验证。根据{{​​3}}您的<beans>应如下所示,您需要特定于Weld的XML:

<beans xmlns="http://java.sun.com/xml/ns/javaee" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:weld="http://jboss.org/schema/weld/beans" 
       xsi:schemaLocation="
          http://java.sun.com/xml/ns/javaee http://docs.jboss.org/cdi/beans_1_0.xsd
          http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd">