2014-02-03 3 views
1

Это - мое первое сообщение на этом форуме.custom xsd validation validation using spring validator

У меня есть xml, который представляет собой список заказов на pnr (рейс). Внутри этого есть список отдельных pnrs. Теперь, если есть одно недопустимое поле для одного pnr, а при проверке схемы xml снова мы получаем ошибку мыла, и проверка кажется остановленной при первой ошибке.

По существу, если в полете 100 pnrs, если один pnr получил недопустимое поле, весь ответ будет потерян из-за этого одного недействительного pnr. Требование состоит в том, чтобы отклонить pnr, если он получил ошибку, и отправить ответ с остальной частью действительного pnr.

Как добиться этого с помощью проверки весны xsd либо по конфигурации, либо по программному обеспечению.

<complexType name="DutBookings"> 
    <sequence> 
     <element name="RecCount" type="long" minOccurs="1" maxOccurs="1"/> 
     <element name="DutBooking" type="tns:DutBooking" minOccurs="0" maxOccurs="unbounded"/> 
    </sequence> 
</complexType> 
<!-- --> 
<complexType name="DutBooking"> 
    <annotation> 
     <documentation> 
      This holds the booking record. 
      The frequent flyer details and airline customer value held at this level represents 
      the highest tier/value for all passengers associated with the booking. 
     </documentation> 
    </annotation> 
    <sequence> 
     <element name="BookingReference" type="tns:FlightBookingReference" minOccurs="0"/> 
     <element name="BookingDate" type="dateTime" minOccurs="0"/> 
     <element name="BookingStatus" type="tns:BookingStatus" minOccurs="0"/> 
     <element name="BookingType" type="tns:BookingType" minOccurs="0"/> 
     <element name="CreatingBookingOffice" type="tns:OfficeID" minOccurs="0"/> 
     <element name="POSCity" type="tns:CityCode" minOccurs="0"/> 
     <element name="POSCountry" type="tns:ISO_CountryCode" minOccurs="0"/> 
     <element name="NameCount" type="tns:Count" minOccurs="0"> 
      <annotation> 
       <documentation>Number of real names on booking, includes infants</documentation> 
      </annotation> 
     </element> 
     <element name="ReservationCount" type="tns:Count" minOccurs="0"> 
      <annotation> 
       <documentation>Count of passengers on booking, excludes infants</documentation> 
      </annotation> 
     </element> 
     <element name="MaxAirlineCustomerValue" type="int" minOccurs="0"/> 
     <element name="CabinCode" type="tns:CabinCode" minOccurs="0"/> 
     <element name="BookingClass" type="tns:SellingClass" minOccurs="0"/> 
     <element name="SplitCount" type="tns:Count" minOccurs="0"> 
       <annotation> 
        <documentation>Number of names split from the booking</documentation> 
       </annotation> 
     </element> 
     <element name="SplitParentBookingReference" type="tns:FlightBookingReference" minOccurs="0"/> 
     <element name="StaffNumber" type="tns:StaffNumber" minOccurs="0"/> 
     <element name="StaffJoiningDate" type="date" minOccurs="0"/> 
     <element name="StaffTravelPriorityCode" type="tns:StaffTravelPriorityCode" minOccurs="0"/> 
     <element name="BookingPassenger" type="tns:BookingPassenger" minOccurs="0" maxOccurs="unbounded"/> 
     <element name="SuitabilityKeyword" type="tns:SuitabilityKeyword" minOccurs="0" maxOccurs="unbounded"/> 
     <element name="DutServiceLine" type="tns:DutServiceLine" minOccurs="0" maxOccurs="unbounded"/> 
    </sequence> 
</complexType> 

Таким образом, вы можете видеть, что есть элементы dutbookings, внутри которых есть список dutbooking. если в одном бронировании есть ошибка проверки, я хочу продолжить с остальными.

Заранее спасибо.

ответ

0

Если вы проверили весь документ, все его проверили на соответствие схеме.

Более программный подход заключается в том, чтобы отдельно проверять список внутренних заказов. Извлеките список элементов бронирования и переустановите действительные в список, оставив (и запустив?) Те, которые не прошли проверку.

Это не похоже на возможность переопределить вашу схему, чтобы «разрешить дополнительные параметры» или что-то другое, что вызвало ошибку pnr. Тогда проверка будет проходить, но это не совсем то, что вы хотите.

+0

Все правила проверки вставляются в строчку в самой схеме. Если я попытаюсь сделать это программно, могу ли я использовать правила проверки из схемы. –

+0

Схемы могут быть разбиты на куски. А «родительская» схема может включать другую. Таким образом, у вас могут быть «DutBookings.xsd» и «DutBooking.xsd». Я бы предположил, что этот API Spring Validation (или, по крайней мере, JAXB) будет иметь вызовы для проверки определенного элемента на конкретную схему. Вы бы контролировали поток ошибок (остановка, продолжение и т. Д.) – clay