我在运行在Windows 10上的Java程序中获得了以下UnmarshalException,该程序使用使用jaxb2 Maven插件2.5.0版本生成的类来处理传入的XML请求:
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)。为什么不只是强制性的领域?
此外,为什么消息声明内容从MotifCommande标记开始无效,尽管后者出现在XSD中(强制的) DateDepot标记之后?
XSD和SOAP请求作为一个压缩,在这个网站上:https://github.com/highsource/maven-jaxb2-plugin/issues/185
非常感谢你的帮助。
发布于 2019-11-29 09:08:33
错误消息列出文档中该位置允许的所有元素。这还包括可选的元素。如果出现其他情况,这是一个错误。
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之后,只有optinoal元素AliasCde或RefExterneCde之后,强制元素DateDepot可能出现。每个其他元素都会导致架构冲突。
在你的请求中,你必须:
<RefCommande>32R69010200004101415</RefCommande>
<SystemeRefCde>32R</SystemeRefCde>
<MotifCommande>ORDST</MotifCommande>在SystemeRefCde之后,序列中的下一个元素是MotifCommande。这是XSD不允许的。至少在中间缺少了强制的DateDepot元素。
https://stackoverflow.com/questions/59101358
复制相似问题