【发布时间】:2014-12-26 17:40:08
【问题描述】:
我们使用 Jaxb (jaxb-api 2.2.5) 从 XSD 生成 Java 类。 'someField' 元素具有 nillable='true' 属性和(隐式)minoccurs='1'。还有一个可选的“订单”属性。
当我们在 someField 上设置 order 属性但没有值时,JAXB 将在没有 nill='true' 的请求中生成 XML 元素,这不会被 XSD 接受并导致 SOAP 错误。
字段的 XSD:
<xs:element name="someField" nillable="true">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="iata:AlphaNumericStringLength1to19">
<xs:attribute name="order" type="xs:integer" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
Jaxb 将其转换为我们 Java 类中的以下字段:
@XmlElement(required = true, nillable = true)
protected SomeParentType.SomeField someField;
SomeField 类如下所示:
public static class SomeField{
@XmlValue
protected String value;
@XmlAttribute
protected BigInteger order;
// getters + setters
}
当我们将 order ATTRIBUTE 设置为 2(例如),并且没有设置任何值时,JAXB 将生成:
<pay1:someField order="2"/>
根据 XSD,这是无效的,当我们发送它时会导致 SOAP 错误。
这确实有效:
<pay1:someField xsi:nil="true" order="2"/>
你知道我们如何让 JAXB be 生成后者吗? JAXB 在生成 nil-less 版本时实际上是错误的吗?
【问题讨论】:
标签: soap attributes jaxb null