Weld 3 启动时发出警告,XSD 对 weld:scan 标签无效 beans.xml
Warning at Weld 3 startup with XSD invalid beans.xml for weld:scan tag
我刚刚将 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
包含一个焊接特定标签,以在扫描中包含一些 类(因为 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 本机支持?或者也许焊缝 XSD 已经改变?
我已经在 bug tracker of Weld 上创建了一个票证,以防出现错误。
正在根据 CDI 验证 XML。根据 https://docs.jboss.org/weld/reference/2.0.1.Final/en-US/html/configure.html,您需要焊接特定 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">
我看不出我以前见过你的问题。我可以确认 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
发现问题 - 我试图在 JIRA issue for CDI (CDI-717).
中描述
但总而言之,这不是焊接问题,而是 CDI 2.0 XSD 验证文件的问题。
有一个意外的更改,删除了一行。
此行允许任何实现(例如 Weld)添加额外的元素(来自不同的命名空间)并且仍然通过 XSD 验证。
为了完整起见,可以看到以前的XSD文件here (with the link to missing line)。
那么新的就是here.
顺便说一句,即使经过这些验证,您 运行 您的应用程序也是安全的 warnings/error。 Weld 注意到它们,但应该能够处理它们并且仍然 运行 您的应用。
我刚刚将 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
包含一个焊接特定标签,以在扫描中包含一些 类(因为 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 本机支持?或者也许焊缝 XSD 已经改变?
我已经在 bug tracker of Weld 上创建了一个票证,以防出现错误。
正在根据 CDI 验证 XML。根据 https://docs.jboss.org/weld/reference/2.0.1.Final/en-US/html/configure.html,您需要焊接特定 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">
我看不出我以前见过你的问题。我可以确认 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
发现问题 - 我试图在 JIRA issue for CDI (CDI-717).
中描述但总而言之,这不是焊接问题,而是 CDI 2.0 XSD 验证文件的问题。 有一个意外的更改,删除了一行。 此行允许任何实现(例如 Weld)添加额外的元素(来自不同的命名空间)并且仍然通过 XSD 验证。
为了完整起见,可以看到以前的XSD文件here (with the link to missing line)。 那么新的就是here.
顺便说一句,即使经过这些验证,您 运行 您的应用程序也是安全的 warnings/error。 Weld 注意到它们,但应该能够处理它们并且仍然 运行 您的应用。