SAXParseException:找不到元素“定义”的声明
Posted
技术标签:
【中文标题】SAXParseException:找不到元素“定义”的声明【英文标题】:SAXParseException : Cannot find the declaration of element 'definitions' 【发布时间】:2016-04-02 00:25:22 【问题描述】:我对 camunda 和 DMN 完全陌生。我试图在 spring-boot 中运行 DMN 示例。 Here is the link 的例子我想在我的机器上运行。
这是我的 pom 依赖项,
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<camunda.version>7.4.0</camunda.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- camunda DMN Engine -->
<dependency>
<groupId>org.camunda.bpm.dmn</groupId>
<artifactId>camunda-engine-dmn-bom</artifactId>
<version>$camunda.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.camunda.bpm.dmn</groupId>
<artifactId>camunda-engine-dmn</artifactId>
<version>$camunda.version</version>
</dependency>
</dependencies>
当我运行它显示以下堆栈跟踪
原因:org.xml.sax.SAXParseException:cvc-elt.1:找不到元素“定义”的声明。 在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) 在 com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:437) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368) 在 com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:325) 在 com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1906) 在 com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:746) 在 com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:379) 在 com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:605) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3138) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:880) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) 在 com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117) 在 com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) 在 com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) 在 com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) 在 com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243) 在 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:348) 在 org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:429) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336) 在 org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217) 在 org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188) 在 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromImportedResources(ConfigurationClassBeanDefinitionReader.java:346) 在 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:142) 在 org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:116) 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:333) 在 org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:243) 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:273) 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:98) 在 org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:678) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:520) 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:764) 在 org.springframework.boot.SpringApplication.doRun(SpringApplication.java:357) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:305) 在 org.springframework.boot.test.SpringApplicationContextLoader.loadContext(SpringApplicationContextLoader.java:98) 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) 在 org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83) 在 org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117) 在 org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) 在 org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 在 org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193) 在 org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283) 在 org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173) 在 org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 在 org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128) 在 org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203) 在 org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155) 在 org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
我没有得到的一件事是,在资源中,他们在 xml 文件中有决策架构,并且在那里他们有 xsd 的 url,但它不起作用。
经过一些 ;) 研究后,我发现了this 链接,其中给出了 xsd url 我试过了,但名称空间 url 再次不起作用。
如果我遗漏了什么,请发表评论:)
编辑
Here is Link to my project
【问题讨论】:
关于 XSD:DMN 1.1 XSD 尚未正式发布。 Camunda DMN 引擎使用的 XSD 可以在以下位置找到:github.com/camunda/camunda-dmn-model/blob/master/src/main/…您在 Spring Boot 项目中使用了哪个 Camunda 版本? 谢谢你的网址。我使用的是 7.4.0 版本。我该如何解决我的问题。请发表评论。我已经编辑了带有 pom 依赖项的问题。 您是如何创建 DMN 文件的?它似乎对 DMN 1.1 XSD 无效。可以附上 DMN XML 文件吗? 我正在使用来自 git 的示例中的 dmn 文件,我在问题中提到了该链接。以下是 DMN 文件的链接github.com/camunda/camunda-bpm-examples/blob/master/dmn-engine/… 示例中的文件有效。这个例子对你有用吗?你能分享一个你项目的链接吗,否则我不知道如何提供帮助。 【参考方案1】:找不到元素“定义”的声明
此错误意味着读取您的 XML 文件(哪个?),没有 definitions
标记,而架构规定应该有一个。
【讨论】:
对不起,我没有得到你的答案。你的意思是它没有在资源文件夹中找到xml文件吗? 它确实找到了 XML,但其内容与预期不符。【参考方案2】:在您的示例中,您使用 Spring ImportResource
注释,该注释用于导入 bean 定义。这就是 Spring 尝试验证您指定的 DMN XML 文件并正确失败的原因,因为它的格式不正确。删除此line。
您还更改了dmn file 的命名空间,它必须是http://www.omg.org/spec/DMN/20151101/dmn11.xsd
。
并且您的resource loading 的路径不正确,因为您的类在包中,而 DMN 文件不正确。将其更改为InputStream inputStream = DishDecider.class.getResourceAsStream("/dish-decision.dmn11.xml");
。
在这 3 项更改之后,您的示例应该可以工作了。
【讨论】:
一个疑问,我不擅长 xml,但只是好奇我是否在浏览器中浏览 dmn 的 xsd url 它不起作用。那么如何获取 xsd 来验证 xml? XSD 仅由以 XSD 作为资源的 Camunda DMN 模型 API 进行验证。我在之前的评论中链接了one。以上是关于SAXParseException:找不到元素“定义”的声明的主要内容,如果未能解决你的问题,请参考以下文章
JAXB - SAXParseException 找不到元素的声明
spring5之SAXParseException:cvc-elt.1: 找不到元素 “beans” 的声明
org.xml.sax.SAXParseException; cvc-complex-type.2.4.c:匹配的通配符是严格的,但找不到元素“mvc:resources”的声明
SSH问题:系统启动时,spring配置文件解析失败,报”cvc-elt.1: 找不到元素 'beans' 的声明“异常