gpt4 book ai didi

java - 在Java中: validate XML against multiple schema's,位于@不同的服务器位置

转载 作者:行者123 更新时间:2023-12-02 08:30:36 25 4
gpt4 key购买 nike

在我的程序中,我正在生成一个 XML 文件,并且需要根据位于不同 URL 上的多个架构来验证该 XML 文件。它需要一次性针对所有架构验证该 XML 文件。

源片段:

// here source array contain the locations of schemas, located at diff servers.
Source[] source = {
new StreamSource(
new URL("http://localhost:8081/test1/testSchema1.xsd")
.openStream()),
new StreamSource(
new URL(
"http://ccr.internal.ericsson.com/test2/testSchema2.xsd")
.openStream()) };

try {
// Compile the schema, which loaded from schemaFileLocation.
Schema schemaGrammar = schemaFactory.newSchema(source);

// Create a validator for schema.
Validator configValidator = schemaGrammar.newValidator();

// set error handler with validator.
SchemaValidator schemaValidator = new SchemaValidator();
configValidator
.setErrorHandler(schemaValidator.new MessageHandler());

// validate xml instance against the grammar.
configValidator.validate(new StreamSource(new File("xmlFile.xml")));
System.out.println("\n");
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

当我运行上面的代码片段时,我收到此错误:

org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'xn:SubNetwork' to a(n) 'element declaration' component. 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.xs.traversers.XSDHandler.reportSchemaError(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDHandler.getGlobalDecl(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseLocal(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseLocal(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDAbstractParticleTraverser.traverseSeqChoice(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDAbstractParticleTraverser.traverseChoice(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDComplexTypeTraverser.processComplexContent(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDComplexTypeTraverser.traverseComplexTypeDecl(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDComplexTypeTraverser.traverseLocal(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseNamedElement(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDElementTraverser.traverseLocal(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDHandler.traverseLocalElements(Unknown Source) at org.apache.xerces.impl.xs.traversers.XSDHandler.parseSchema(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaLoader.loadSchema(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) at com.work.test.generateErrorLog(SchemaValidator.java:197)

代码有什么问题?他们还有其他方法来验证多个模式吗?

最佳答案

我也遇到了同样的问题。

我改变了模式的顺序。

首先我导入了所有子架构,最后我设置了主架构。

Source[] sources = new Source[] { new StreamSource(new InputStreamReader(SomeClass.class.getResourceAsStream("/com/foo/subschema1.xsd"), "UTF-8")), 
new StreamSource(new InputStreamReader(SomeClass.class.getResourceAsStream("/com/foo/subschema2.xsd"), "UTF-8")),
new StreamSource(new InputStreamReader(SomeClass.class.getResourceAsStream("/com/foo/subschema3.xsd"), "UTF-8")),
...
new StreamSource(new InputStreamReader(SomeClass.class.getResourceAsStream("/com/foo/mainschema.xsd"), "UTF-8"))};

关于java - 在Java中: validate XML against multiple schema's,位于@不同的服务器位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3499476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com