我的应用程序正在调用 Web 服务,并且我已经使用 maven-jaxb2-plugin 从 WSDL/XSD 生成了 Java 类。网络服务调用在一段时间内运行良好,但最近我在将对象编组为 XML 时遇到了问题:
[org.xml.sax.SAXParseException: cvc-complex-type.2.4.d: Invalid content was found starting with element 'ns1:TheFooAndBarThing'.
No child element '{"http://www.myschemanamespace.xyz/v1":BarId}' is expected at this point.]
XSD 部分如下所示:
<xs:complexType name="TheFooAndBarThing">
<xs:sequence>
<xs:element name="FooId" minOccurs="1" maxOccurs="1" type="nx:FooIdType"/>
<xs:element name="BarId" minOccurs="1" maxOccurs="100" type="nx:BarIdType"/>
</xs:sequence>
</xs:complexType>
生成的类TheFooAndBarThing
如下所示(Javadoc 已删除):
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "TheFooAndBarThing", propOrder = {
"fooId",
"barId"
})
public class TheFooAndBarThing {
@XmlElement(name = "FooId", required = true)
protected String fooId;
@XmlElement(name = "BarId", required = true)
protected List<String> barId;
public String getFooId() {
return fooId;
}
public void setFooId(String value) {
this.fooId = value;
}
public List<String> getBarId() {
if (barId == null) {
barId = new ArrayList<String>();
}
return this.barId;
}
}
我花了一些时间和咖啡来找出真正的问题。我的错误是我BarId
在列表中放了 100 多个元素。
所以这是我的问题:
如何将 XSD 中的 maxOccurs/minOccurs 值获取到我的 Java 代码中,以便在构建元素列表时将其用作最大/最小值?