Java 元素';断言';无效、错位或发生频率过高
供应商向我们提供了一组架构(我们也向他们发出了错误警报)。Java 元素';断言';无效、错位或发生频率过高,java,xml,xsd,jaxb,xsd-1.1,Java,Xml,Xsd,Jaxb,Xsd 1.1,供应商向我们提供了一组架构(我们也向他们发出了错误警报)。 当我尝试使用xjc生成Java类时,它失败了,错误如下 C:\Users\...>"C:\Program Files (x86)\Java\jdk1.7.0_80\bin\xjc.exe" -d output ICSv1.01.xsd 正在分析架构 [错误]s4s elt的内容无效。1:“ICSBatchV01”的内容无效 无效的元素“assert”无效、放错位置或出现频率过高。 文件的第77行:/C:/Users/../ICS
当我尝试使用xjc生成Java类时,它失败了,错误如下
C:\Users\...>"C:\Program Files (x86)\Java\jdk1.7.0_80\bin\xjc.exe" -d output ICSv1.01.xsd
正在分析架构
[错误]s4s elt的内容无效。1:“ICSBatchV01”的内容无效
无效的元素“assert”无效、放错位置或出现频率过高。
文件的第77行:/C:/Users/../ICSv1.01.xsd
[错误]s4s elt无效内容。1:“ICSDocBody”的内容无效
无效的元素“assert”无效、放错位置或出现频率过高。
文件的第215行:/C:/Users/../ICSv1.01.xsd
未能分析架构
我还尝试了Java8和最新、最伟大的jaxb(Javadist之外)
然而,它确实可以与Altova的xmlspy软件配合使用,但它试图避免供应商锁定/非标准的东西。我在这里和网上做了一些搜索(大部分在这里) 这是标题
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2015 rel. 4 sp1 (x64) (http://www.altova.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns:msg01="urn:cccc:tech:xsd:ics.msg01.001" xmlns:msg02="urn:cccc:tech:xsd:ics.msg02.001" xmlns:msg03="urn:cccc:tech:xsd:ics.msg03.001" xmlns:msg04="urn:cccc:tech:xsd:ics.msg04.001" xmlns:msg05="urn:cccc:tech:xsd:ics.msg05.001" xmlns:msg06="urn:cccc:tech:xsd:ics.msg06.001" xmlns:msg07="urn:cccc:tech:xsd:ics.msg07.001" xmlns:msg08="urn:cccc:tech:xsd:ics.msg08.001" xmlns:msg09="urn:cccc:tech:xsd:ics.msg09.001" xmlns:msg11="urn:cccc:tech:xsd:ics.msg11.001" xmlns:msg12="urn:cccc:tech:xsd:ics.msg12.001" xmlns:msg13="urn:cccc:tech:xsd:ics.msg13.001" xmlns:msg14="urn:cccc:tech:xsd:ics.msg14.001" xmlns:msq01="urn:cccc:tech:xsd:ics.msq01.001" xmlns:msq02="urn:cccc:tech:xsd:ics.msq02.001" xmlns:msq03="urn:cccc:tech:xsd:ics.msq03.001" xmlns:msq04="urn:cccc:tech:xsd:ics.msq04.001" xmlns:msq05="urn:cccc:tech:xsd:ics.msq05.001" xmlns:msf01="urn:cccc:tech:xsd:ics.msf01.001" xmlns:msf02="urn:cccc:tech:xsd:ics.msf02.001" xmlns:msf03="urn:cccc:tech:xsd:ics.msf03.001" xmlns:msf04="urn:cccc:tech:xsd:ics.msf04.001" xmlns:mss01="urn:cccc:tech:xsd:ics.mss01.001" xmlns:mss02="urn:cccc:tech:xsd:ics.mss02.001" xmlns:mss03="urn:cccc:tech:xsd:ics.mss03.001" xmlns:mss04="urn:cccc:tech:xsd:ics.mss04.001" xmlns:msp01="urn:cccc:tech:xsd:ics.msp01.001" xmlns:msp02="urn:cccc:tech:xsd:ics.msp02.001" xmlns:msp03="urn:cccc:tech:xsd:ics.msp03.001" xmlns:msp04="urn:cccc:tech:xsd:ics.msp04.001" xmlns:doc="urn:cccc:tech:xsd:ics.doc.001" xmlns="urn:cccc:tech:xsd:ics.doc.001" targetNamespace="urn:cccc:tech:xsd:ics.doc.001" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1">
以下是相关的代码片段。从第44行开始,到第77行结束(xjc转换器报告了第一个错误)
MIG 10.1 NbOfTxs(MWR030):文件中信息的计数
MIG 10.1 DocTyp:标识文件内容的代码
xs:assert
需要xsd1.1,但JAXB只支持xsd1.0,不支持xsd1.1。没有一个请求添加对XSD 1.1的支持(参考文献:和)
怎么办:
- 贡献自己的力量,或者希望别人做(不太可能)
- 同时,分析XSD的1.1依赖关系。如果是温和的,
例如只使用
xs:assert
,编写一个简单的XSLT转换
剥离xs:assert
验证,以便仍然可以生成
上课。(参见下面的XSLT。)根据需要,也可以执行xs:assert
检查
在Java代码中手动输入
剥离XSLTxs:assert
:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xs:assert"/>
</xsl:stylesheet>
谢谢kjhughes,我手动删除了xs:asserts,并得到了一些其他错误(不幸的是,我手头没有这些错误)。在删除所有asserts后手动删除asserts后,我找到了错误的草稿行C:\perforce\COMMON\ICSv1.01>“C:\Program Files(x86)\Java\jdk1.7.0\u 80\bin\xjc.exe”-d src/main/java-p com.netdeposit.ics src/main/resources/ICSv1.01.xsd解析架构。。。[错误]属性“Any”已定义。使用jaxb:property>解决此冲突。文件的第177行:/C:/perforce/COMMON/ICSv1.01/src/main/resources/ICSv1.01.xsd[错误]以下位置与文件的上述错误行178相关:/C:/perforce/COMMON/ICSv1.01/src/main/resources/ICSv1.01。xsd@unsavorycoder:不客气。如果这些新错误仍然是一个问题,请发布一个新问题;您可能想在此处链接到它。@KJ认为给定的资源链接不起作用。JAXB支持xsd 1.1吗?@SangamBelose:我已经更新了答案,因为这些链接已经损坏了。不幸的是,JAXB中仍然不支持XSD 1.1,目前看来不太可能支持XSD 1.1。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="xs:assert"/>
</xsl:stylesheet>