CXF: установите minOccurs = 0 для элементов массивов - PullRequest
1 голос
/ 26 февраля 2010

Мы используем фреймворк 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"/>

1 Ответ

0 голосов
/ 10 июня 2010

Вы должны использовать файл сопоставления :

 <mappings>
  <mapping name="ArrayOfDetails">
    <property name="Details" minOccurs='0'/>
  </mapping>
</mappings>
...