Java: проверка схемы XSD 1.1 XML с утверждениямиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java: проверка схемы XSD 1.1 XML с утверждениями

Сообщение Anonymous »

Я хочу протестировать сгенерированные файлы XML с файлом XSD 1.1, содержащим утверждения, и мне хотелось бы сделать это на Java.
Мое содержимое XML:

Код: Выделить всё


John Doe
17

Содержимое XSD выглядит следующим образом и содержит два утверждения: Я использую:

Код: Выделить всё

implementation("org.opengis.cite.xerces:xercesImpl-xsd11:2.12-beta-r1667115")
как зависимость в моем файле build.gradle.kts. И следующий код Java работает:

Код: Выделить всё

// That's the important String which instantiates a xsd 1.1 aware schema factory + validator
SchemaFactory sf = SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1");
Schema s = sf.newSchema(new StreamSource(getClass().getResourceAsStream(xsdFilePath)));
Validator v = s.newValidator();
v.validate(new StreamSource(getClass().getResourceAsStream(xmlFilePath)));
Ура, теперь я получаю исключение проверки:

Код: Выделить всё

Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 10; cvc-assertion: Assertion evaluation ('Age >= 18') for element 'Person' on schema type '#AnonType_Person' did not succeed.
Проблема
Когда я устанавливаю этот возраст равным 18, я не получаю ошибку проверки имени (длина > 15), но Я получаю

Код: Выделить всё

Exception in thread "main"  java.lang.NoClassDefFoundError: com/ibm/icu/text/UTF16
at org.eclipse.wst.xml.xpath2.processor.internal.function.FnStringLength.string_length(FnStringLength.java:105)
at org.eclipse.wst.xml.xpath2.processor.internal.function.FnStringLength.evaluate(FnStringLength.java:74)
at org.eclipse.wst.xml.xpath2.processor.DefaultDynamicContext.evaluate_function(DefaultDynamicContext.java:194)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:1611)
at org.eclipse.wst.xml.xpath2.processor.internal.ast.FunctionCall.accept(FunctionCall.java:46)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:2139)
at org.eclipse.wst.xml.xpath2.processor.internal.ast.FilterExpr.accept(FilterExpr.java:52)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:1258)
at org.eclipse.wst.xml.xpath2.processor.internal.ast.XPathExpr.accept(XPathExpr.java:43)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.do_bin_args(DefaultEvaluator.java:803)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:614)
at org.eclipse.wst.xml.xpath2.processor.internal.ast.CmpExpr.accept(CmpExpr.java:106)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.do_expr(DefaultEvaluator.java:315)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:1573)
at org.eclipse.wst.xml.xpath2.processor.internal.ast.ParExpr.accept(ParExpr.java:40)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:2139)
at org.eclipse.wst.xml.xpath2.processor.internal.ast.FilterExpr.accept(FilterExpr.java:52)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:1258)
at org.eclipse.wst.xml.xpath2.processor.internal.ast.XPathExpr.accept(XPathExpr.java:43)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:1607)
at org.eclipse.wst.xml.xpath2.processor.internal.ast.FunctionCall.accept(FunctionCall.java:46)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:2139)
at org.eclipse.wst.xml.xpath2.processor.internal.ast.FilterExpr.accept(FilterExpr.java:52)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:1258)
at org.eclipse.wst.xml.xpath2.processor.internal.ast.XPathExpr.accept(XPathExpr.java:43)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.do_expr(DefaultEvaluator.java:315)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:336)
at org.eclipse.wst.xml.xpath2.processor.ast.XPath.accept(XPath.java:43)
at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.evaluate(DefaultEvaluator.java:290)
at org.apache.xerces.impl.xs.AbstractPsychoPathXPath2Impl.evaluateXPathExpr(Unknown Source)
at org.apache.xerces.impl.xs.XMLAssertPsychopathXPath2Impl.evaluateOneAssertion(Unknown Source)
at org.apache.xerces.impl.xs.XMLAssertPsychopathXPath2Impl.evaluateAssertionsFromAComplexType(Unknown Source)
at org.apache.xerces.impl.xs.XMLAssertPsychopathXPath2Impl.processAllAssertionsOnElement(Unknown Source)
at org.apache.xerces.impl.xs.XMLAssertPsychopathXPath2Impl.endElement(Unknown Source)
at org.apache.xerces.impl.xs.XSDAssertionValidator.handleEndElement(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.assertionValidatorEndElementDelegate(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.handleEndElement(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.endElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.jaxp.validation.StreamValidatorHelper.validate(Unknown Source)
at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)
at java.xml/javax.xml.validation.Validator.validate(Validator.java:124)
at org.example.HelloWorld.validateXMLSchemaXerxes(HelloWorld.java:50)
at org.example.HelloWorld.main(HelloWorld.java:31)
Caused by: java.lang.ClassNotFoundException:  com.ibm.icu.text.UTF16
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
... 48 more
Вопрос:
  • Как решить эту проблему?
  • В 2024 году , до сих пор нет другой доступной библиотеки с открытым исходным кодом, которая могла бы проверять утверждения XSD 1.1?


Подробнее здесь: https://stackoverflow.com/questions/792 ... th-asserts
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»