私のアプリケーションは Web サービスを呼び出しており、maven-jaxb2-plugin を使用して WSDL/XSD から Java クラスを生成しました。Web サービスの呼び出しはしばらくの間問題なく機能していましたが、最近、オブジェクトを 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;
}
}
本当の問題を見つけるには、時間とコーヒーが必要でした。私の間違いは、リストに 100 を超えるBarId
要素を入れたことです。
では、私の質問は次のとおりです
。XSD から maxOccurs/minOccurs 値を Java コードに取得して、要素のリストを作成するときに最大値/最小値として使用するにはどうすればよいですか?