SAXParseException с Camel 4

org.xml.sax.SAXParseException; lineNumber: 4268; columnNumber: 51; cos-nonambig: "http://camel.apache.org/schema/spring":onFallback and "http://camel.apache.org/schema/spring":onFallback (or elements from their substitution group) violate "Unique Particle Attribution". During validation against this schema, ambiguity would be created for those two particles.

      at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
      at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
      at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
      at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
      at org.apache.xerces.impl.xs.XSConstraints.reportSchemaError(Unknown Source)
      at org.apache.xerces.impl.xs.XSConstraints.fullSchemaChecking(Unknown Source)
      at org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
      at org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
      at org.apache.xerces.jaxp.validation.XMLSchemaFactory.newSchema(Unknown Source)

Я получаю эту ошибку при попытке создать новую схему из Camel-spring.xsd после обновления версии Camel до 4.0.4 и Java 17.

Код такой, и ошибка возникает в последней строке:

import com.google.common.io.Resources;

import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.SchemaFactory;
import java.io.ByteArrayInputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


public class Camel
{

    public static void main( String[] args ) throws Exception
    {
       SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);

       List<Source> tmp = new ArrayList();

       String loc = "camel-spring.xsd";

       URL url = Resources.getResource(loc);
       byte[] bytes = Resources.toByteArray(url);
       StreamSource src = new StreamSource(new ByteArrayInputStream(bytes));
       tmp.add(src);

       schemaFactory.newSchema((Source[]) tmp.toArray(new Source[tmp.size()]));
    }
}

Вы когда-нибудь видели эту ошибку?

Я видел, что в Camel-spring.xsd 4.x (https://camel.apache.org/schema/spring/) в элементе CircuitBreakerDefinition есть два элемента «onFallBack», и это ошибка. Когда я комментирую один из них, я не получаю ошибки. Но я не могу изменить jar. Знаете ли вы, есть ли способ получить схему из xsd Camel 4.x?

camel-spring.xsd

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
98
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

«org.xml.sax.SAXParseException» обычно указывает на проблему при синтаксическом анализе данных в формате XML. Это происходит в строке, где вы загружаете схему — но эй: схема также является неким XML-документом. Следовательно, проблема заключается либо в том, как вы загружаете данные, либо в самих данных, которые вы загружаете (вы показываете только свой код).

  • убедитесь, что ресурс, который вы пытаетесь загрузить, имеет правильный формат XML и действителен.
  • проверьте, обращается ли ваш код к правильному ресурсу (возможно, распечатайте URL-адрес для регистрации или консоли, загрузите и распечатайте содержимое потока)
  • проверьте, правильно ли код передает ваш входной поток функциям Camel, чтобы они могли его понять

Глядя на полное сообщение об ошибке, я предполагаю, что проблема в вашей схеме, строка номер 4268. Посмотрите на «onFallback» или аналогичные элементы.

Это не ошибка XML, потому что я использую этот xsd в jar-файле Camel-spring.xml. Я пробовал другие способы его анализа, но все равно получаю ту же ошибку. Может быть, речь идет о совместимой версии Camel 4.0.4 и Javax Validator?

Rebeca Baptista 14.03.2024 13:46
Ответ принят как подходящий

Вы можете попробовать установить для этой функции значение false:

schemaFactory.setFeature("http://apache.org/xml/features/validation/schema-full-checking", false);

В этой (очень старой) документации упоминается, что «атрибуция уникальных частиц» — это одна из отключенных проверок.

Другие вопросы по теме