Мы используем фреймворк CXF с Aegis Mapper для сервера Java и клиента .NET.
По умолчанию у нас minOccurs = 0 для всех переменных в классах в WSDL.
Мы используем такую настройку в конфиге CXF, чтобы предотвратить это:
<bean id="aegisBean" class="org.apache.cxf.aegis.databinding.AegisDatabinding" scope="prototype">
<property name="configuration">
<bean class="org.apache.cxf.aegis.type.TypeCreationOptions">
<property name="defaultNillable" value="false"/>
<property name="defaultMinOccurs" value="1"/>
</bean>
</property>
</bean>
Но у нас есть другая проблема с массивом. Для массива у нас есть такой код в WSDL:
<xsd:complexType name="ArrayOfDetails">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="Details" type="tns:Details"/>
</xsd:sequence>
</xsd:complexType>
То есть пустые массивы не принимаются:
org.apache.cxf.interceptor.Fault: The number of elements in {http://dto.WebServices.com}ArrayOfDetails does not meet the mini mum of 1
Возможно ли добавить аннотацию к массиву, которая устанавливает minOccurs = "0" для элементов массива (не для всего массива)? Или можно настроить это как конфигурацию AEGIS для всех массивов?
<xsd:element minOccurs="0" maxOccurs="unbounded" name="Details" type="tns:Details"/>