Предупреждение при запуске сварки 3 с недопустимым XSD beans.xml для сварки: тег сканирования

Я только что обновил 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?

Я создал тикет на багтрекере Weld на случай, если это баг.

3 ответа

Решение

Нашел проблему - я попытался описать в JIRA проблему для CDI (CDI-717).

Подводя итог, можно сказать, что проблема не в сварке, а в проблеме с файлом проверки CDI 2.0 XSD. Произошло непреднамеренное изменение, когда была удалена одна строка. Эта строка позволяла любой реализации (например, Weld) добавлять дополнительные элементы (из разных пространств имен) и по-прежнему проходить проверку XSD.

Просто для полноты, бывший XSD-файл можно увидеть здесь (со ссылкой на отсутствующую строку). Новый тогда здесь.

Кстати, вы можете безопасно запускать ваше приложение даже с этими предупреждениями / ошибками проверки. Weld замечает их, но должен уметь с ними справляться и при этом запускать ваше приложение.

Я не вижу, что я видел твою проблему раньше. Я могу подтвердить, что weld:scan все еще поддерживается в Weld 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 - https://github.com/jersey/jersey/tree/master/ext/cdi/jersey-weld2-se

XML проверяется на соответствие CDI. Вам требуется специфический для Weld XML, в соответствии с https://docs.jboss.org/weld/reference/2.0.1.Final/en-US/html/configure.html вашим <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">
Другие вопросы по тегам