3

我刚刚将 Weld 从 2.4.4 版本更新到 3.0.1。我在应用程序启动时遇到以下错误,我找不到解决方案。我正在使用焊接 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标签以在扫描中包含一些类(因为 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 可能发生了变化?

我已经在Weld 的错误跟踪器上创建了一张票,以防它是一个错误。

4

3 回答 3

2

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

但在这里总结一下,这不是 Weld 问题,而是 CDI 2.0 XSD 验证文件的问题。 有一个意外的变化,其中一行被删除。这一行允许任何实现(例如 Weld)添加额外的元素(来自不同的命名空间)并且仍然通过 XSD 验证。

为了完整起见,可以在此处看到以前的 XSD 文件(带有指向缺失行的链接)。新的就在这里

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

于 2017-09-26T14:46:36.707 回答
0

我看不到我以前见过你的问题。我可以确认weld:scanWeld 3 仍然支持它,但我不确定(假设您使用的是 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

于 2017-09-23T01:20:44.810 回答
-1

XML 正在针对 CDI 进行验证。根据https://docs.jboss.org/weld/reference/2.0.1.Final/en-US/html/configure.html ,您需要 Weld 特定的 XML,您<beans>应该如下所示:

<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">
于 2017-09-15T19:41:40.070 回答