繁体   English   中英

SAXParseException 列出可选值

[英]SAXParseException lists optional values

我在 Windows 10 上运行的 Java 1.8.0_191 程序中收到以下 UnmarshalException,该程序使用使用 jaxb2 Maven 插件版本 2.5.0 生成的类来处理传入的 XML SOAP 请求:

JAXB unmarshalling exception; nested exception is javax.xml.bind.UnmarshalException with linked exception:
[org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 622; cvc-complex-type.2.4.a : Contenu non valide trouvé à partir del'élément 'MotifCommande'. L'une des valeurs '{AliasCde,RefExterneCde, DateDepot}' est attendue.]

这是异常消息的英文快速翻译:

发现以 MotifCommand 项开头的无效内容。 预期项目 '{AliasCd, RefExterneCde, DateDepot}' 之一。

奇怪的是,项目列表提到了两个可选字段(AliasCD 和 RefExterneCde)和一个必填字段(DateDepot)。 为什么不只是必填字段?

此外,尽管后者出现XSD 中的(强制性)DateDepot 标记之后,但为什么该消息声明内容以 MotifCommande 标记开头无效?

XSD 和 SOAP 请求以 zip 格式提供,在此网站上: https : //github.com/highsource/maven-jaxb2-plugin/issues/185

非常感谢您的帮助。

错误消息列出了文档中该位置允许的所有元素。 这还包括可选元素。 如果出现其他任何内容,则为错误。

XML 模式中的相关部分是这样的:

<xsd:sequence>
  <xsd:element name="SystemeRefCde" type="xsd:string" minOccurs="1"/>
  <xsd:element name="AliasCde" minOccurs="0" maxOccurs="unbounded">
  <xsd:element name="RefExterneCde" minOccurs="0" maxOccurs="unbounded">
  <xsd:element name="DateDepot" type="xsd:string" minOccurs="1"/>
  <!-- ... -->
  <xsd:element name="MotifCommande" type="xsd:string" minOccurs="0"/>

您正在使用一个序列。 因此项目的顺序是相关的。 这意味着,在SystemeRefCde之后,只有可选元素AliasCdeRefExterneCde ,在这些之后,可能会出现必需元素DateDepot 每个其他元素都会导致架构违规。

在您的请求中,您有:

<RefCommande>32R69010200004101415</RefCommande>
<SystemeRefCde>32R</SystemeRefCde>

<MotifCommande>ORDST</MotifCommande>

SystemeRefCde之后, SystemeRefCde的下一个元素是MotifCommande 这是 XSD 不允许的。 您至少缺少介于两者之间的强制性DateDepot元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM