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
«org.xml.sax.SAXParseException» обычно указывает на проблему при синтаксическом анализе данных в формате XML. Это происходит в строке, где вы загружаете схему — но эй: схема также является неким XML-документом. Следовательно, проблема заключается либо в том, как вы загружаете данные, либо в самих данных, которые вы загружаете (вы показываете только свой код).
Глядя на полное сообщение об ошибке, я предполагаю, что проблема в вашей схеме, строка номер 4268. Посмотрите на «onFallback» или аналогичные элементы.
Вы можете попробовать установить для этой функции значение false:
schemaFactory.setFeature("http://apache.org/xml/features/validation/schema-full-checking", false);
В этой (очень старой) документации упоминается, что «атрибуция уникальных частиц» — это одна из отключенных проверок.
Это не ошибка XML, потому что я использую этот xsd в jar-файле Camel-spring.xml. Я пробовал другие способы его анализа, но все равно получаю ту же ошибку. Может быть, речь идет о совместимой версии Camel 4.0.4 и Javax Validator?