如何在Web应用程序中加载多个XSD?

时间:2015-04-09 07:37:12

标签: java xml xsd xsd-validation

我们有两个架构(XSD)文件,一个文件包含另一个。 当我们加载模式文件以验证XML文件时,它无法正确加载到Web应用程序中。 它为包含的模式文件元素抛出了错误。

        Source[] sources = new StreamSource[2];

            Source schemaFile = new StreamSource(Test.class.getClassLoader().getResourceAsStream(“a.xsd”));
            sources[0] = schemaFile;

            Source schemaFile1 = new StreamSource(Test.class.getClassLoader().getResourceAsStream(“b.xsd”));
            sources[1] = schemaFile1;

            Schema schema = factory.newSchema(sources);

b.xsd包含a.xsd文件。 但是当我们在main方法中运行它时,相同的代码工作正常。

有人可以提出解决此问题的建议吗?

我们可以在org.w3c.dom.ls包中使用LSResourceResolver执行此操作。 Problem validating an XML file using Java with an XSD having an include

在网络基础应用程序中,有没有办法用javax做到这一点?

错误:

org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ns:Request'.
       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.XMLSchemaValidator.handleStartElement(Unknown Source)
       at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
       at org.apache.xerces.jaxp.validation.DOMValidatorHelper.beginNode(Unknown Source)
       at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
       at org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
       at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown Source)
       at javax.xml.validation.Validator.validate(Unknown Source)

1 个答案:

答案 0 :(得分:1)

LSResourceResolver是一个很好的,使用整个xml解析基础设施。

简单的黑客将是:

  • 而不是使用来自类加载器的流,将两个模式文件复制到临时位置
  • 使用复制文件的文件路径

或者更容易

  • 将您的架构存储在类旁边的src文件夹中,但不在web文件夹下。您可以获取Web下资源的真实文件路径,并使用它们来启动模式。