2010-02-26 4 views
1

Мы используем фреймворк CXF с aegis mapper для java-сервера и .NET-клиента. По умолчанию у нас есть minOccurs = 0 для всех переменных в классах WSDL. Мы используем такие настройки в CXF конфигурации, чтобы предотвратить его:CXF: Установить minOccurs = 0 для элементов массивов

<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» к элементам массив (а не весь массив)? Или можно установить, что это конфигурация эгиды для всех массивов?

<xsd:element minOccurs="0" maxOccurs="unbounded" name="Details" type="tns:Details"/> 

ответ

0

Вы должны использовать mapping file:

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