Валидатор Raml выдает ошибку в javax.xml.validation.SchemaFactory.newSchema
При попытке проверить espn.raml я получил следующую ошибку. Тот же код работает нормально для gmail.raml. Почему это происходит? Для справки, я включил результаты, которые я нашел, какие банки включены в SchemaFactory.
$ find *.jar | xargs grep SchemaFactory.class Двоичный файл
axiom_1.2.11.wso2v6.jar соответствует двоичному файлу
org.apache.openjpa_2.2.0.wso2v1.jar соответствует двоичному файлу
совпадения solr_5.2.1.wso2v1.jar
Это исключение, которое я получаю:
Caused by: java.lang.LinkageError: loader constraint violation: when resolving method "javax.xml.validation.SchemaFactory.newSchema(Ljavax/xml/transform/Source;)Ljavax/xml/validation/Schema;" the class loader (instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) of the current class, org/raml/parser/rule/SchemaRule, and the class loader (instance of <bootloader>) for resolved class, javax/xml/validation/SchemaFactory, have different Class objects for the type m/Source;)Ljavax/xml/validation/Schema; used in the signature
at org.raml.parser.rule.SchemaRule.doValidateValue(SchemaRule.java:118)
at org.raml.parser.rule.SchemaRule.doValidateValue(SchemaRule.java:48)
at org.raml.parser.rule.DefaultTupleRule.validateValue(DefaultTupleRule.java:108)
at org.raml.parser.visitor.YamlDocumentValidator.onScalar(YamlDocumentValidator.java:115)
at org.raml.parser.visitor.NodeVisitor.visitScalar(NodeVisitor.java:256)
at org.raml.parser.visitor.NodeVisitor.visit(NodeVisitor.java:222)
at org.raml.parser.visitor.NodeVisitor.visitResolvedNode(NodeVisitor.java:180)
at org.raml.parser.visitor.NodeVisitor.doVisitMappingNode(NodeVisitor.java:151)
at org.raml.parser.visitor.NodeVisitor.visitMappingNode(NodeVisitor.java:86)
at org.raml.parser.visitor.NodeVisitor.visit(NodeVisitor.java:218)
at org.raml.parser.visitor.NodeVisitor.visitResolvedNode(NodeVisitor.java:180)
at org.raml.parser.visitor.NodeVisitor.doVisitMappingNode(NodeVisitor.java:151)
at org.raml.parser.visitor.NodeVisitor.visitMappingNode(NodeVisitor.java:86)
at org.raml.parser.visitor.NodeVisitor.visit(NodeVisitor.java:218)
at org.raml.parser.visitor.NodeVisitor.visitResolvedNode(NodeVisitor.java:180)
at org.raml.parser.visitor.NodeVisitor.doVisitMappingNode(NodeVisitor.java:151)
at org.raml.parser.visitor.NodeVisitor.visitMappingNode(NodeVisitor.java:86)
at org.raml.parser.visitor.NodeVisitor.visit(NodeVisitor.java:218)
at org.raml.parser.visitor.NodeVisitor.visitResolvedNode(NodeVisitor.java:180)
at org.raml.parser.visitor.NodeVisitor.doVisitMappingNode(NodeVisitor.java:151)
at org.raml.parser.visitor.NodeVisitor.visitMappingNode(NodeVisitor.java:86)
at org.raml.parser.visitor.NodeVisitor.visit(NodeVisitor.java:218)
at org.raml.parser.visitor.NodeVisitor.visitResolvedNode(NodeVisitor.java:180)
at org.raml.parser.visitor.NodeVisitor.doVisitMappingNode(NodeVisitor.java:151)
at org.raml.parser.visitor.NodeVisitor.visitMappingNode(NodeVisitor.java:86)
at org.raml.parser.visitor.NodeVisitor.visit(NodeVisitor.java:218)
at org.raml.parser.visitor.NodeVisitor.visitResolvedNode(NodeVisitor.java:180)
at org.raml.parser.visitor.NodeVisitor.doVisitMappingNode(NodeVisitor.java:151)
at org.raml.parser.visitor.NodeVisitor.visitMappingNode(NodeVisitor.java:86)
at org.raml.parser.visitor.NodeVisitor.visit(NodeVisitor.java:218)
at org.raml.parser.visitor.NodeVisitor.visitResolvedNode(NodeVisitor.java:180)
at org.raml.parser.visitor.NodeVisitor.doVisitMappingNode(NodeVisitor.java:151)
at org.raml.parser.visitor.NodeVisitor.visitMappingNode(NodeVisitor.java:86)
at org.raml.parser.visitor.NodeVisitor.visit(NodeVisitor.java:218)
at org.raml.parser.visitor.NodeVisitor.visitResolvedNode(NodeVisitor.java:180)
at org.raml.parser.visitor.NodeVisitor.doVisitMappingNode(NodeVisitor.java:151)
at org.raml.parser.visitor.NodeVisitor.visitMappingNode(NodeVisitor.java:86)
at org.raml.parser.visitor.NodeVisitor.visit(NodeVisitor.java:218)
at org.raml.parser.visitor.NodeVisitor.visitResolvedNode(NodeVisitor.java:180)
at org.raml.parser.visitor.NodeVisitor.doVisitMappingNode(NodeVisitor.java:151)
at org.raml.parser.visitor.NodeVisitor.visitDocument(NodeVisitor.java:209)
at org.raml.parser.visitor.YamlValidationService.validate(YamlValidationService.java:65)
at org.raml.parser.visitor.YamlValidationService.validate(YamlValidationService.java:95)
at org.raml.parser.visitor.YamlValidationService.validate(YamlValidationService.java:82)
at org.raml.parser.visitor.YamlValidationService.validate(YamlValidationService.java:72)
at org.wso2.carbon.registry.custom.extensions.handlers.utils.RAMLProcessor.isValidateRAML(RAMLProcessor.java:127)
at org.wso2.carbon.registry.custom.extensions.handlers.utils.RAMLProcessor.processRAML(RAMLProcessor.java:79)
at org.wso2.carbon.registry.custom.extensions.handlers.RAMLMediaTypeHandler.put(RAMLMediaTypeHandler.java:157)
at org.wso2.carbon.registry.core.jdbc.handlers.HandlerManager.put(HandlerManager.java:2503)
... 78 more
1 ответ
Это странно У меня нет проблем с запуском следующего:
RamlValidationService
.createDefault()
.validate("http://api.apihub.com/onpositive/api/espn-raml-api/espn.raml");
Он не выдает никаких исключений и возвращает пустой List<ValidationResult>
, так как этот файл RAML действителен.
Моя среда:
Apache Maven 3.3.3
Java version: 1.8.0_60, vendor: Oracle Corporation
В моем случае, javax.xml.validation.SchemaFactory
предоставляется самой JDK. Вы должны стремиться к тому же, то есть убедиться, что никакая другая библиотека не может добавить этот класс в ваш код, либо используя альтернативные JAR-файлы, которые не содержат этот класс (кажется, что это специфичные для WSO2 версии, другие версии могут отличаться?) или с помощью фильтрации загрузчика классов, если среда выполнения позволяет это.
РЕДАКТИРОВАТЬ Как добавлено в комментариях, исправление должно было исключить xml-apis:xml-apis
из RAML Parser. Это исключение имеет смысл, так как последние JDK предоставили то, что нужно для RAML Parser.
Исключение xml-apis из raml-parser сделало свою работу.
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
Теперь его проверка без проблем.