Как включить проверку схемы, чтобы JAXB отклонял пустой элемент? - PullRequest
1 голос
/ 15 мая 2011

Я столкнулся с ошибкой синтаксического анализа JAXB.Я использую JAXB RI 2.x.Я включил проверку схемы с помощью «unmarshaller.setSchema (схема)».Однако, если XML содержит пустой элемент, JAXB не выдает никакой ошибки проверки.Таким образом, клиенты с удовольствием передают пустые строковые значения !!

Вот как элемент объявлен в схеме:

(см. Мои комментарии ниже)

Вот каконо появляется в экземпляре XML:

(см. мои комментарии ниже)

Несмотря на то, что это обязательное поле, оно успешно проверено JAXB.Как включить отклонение таких пустых элементов?

Спасибо

Ответы [ 2 ]

3 голосов
/ 15 мая 2011

Вам необходимо объявить новый простой тип в вашей XML-схеме, который является ограничением xsd: string, включающим minLength фасет.

<xs:element name="ChargeCode" type="stringMinSize1"/>
<xs:simpleType name="stringMinSize1">
    <xs:restriction base="xs:string">
        <xs:minLength value="1"/>
    </xs:restriction>
</xs:simpleType>

Вы также можете использовать другие аспекты, такие как pattern, для дальнейшего контроля того, как выглядит содержимое строки. Типичным примером является канадский почтовый индекс, который чередуется между буквами:

<xs:element name="PostalCode" type="postalCode"/>
<xs:simpleType name="postalCode">
    <xs:restriction base="xs:string">
        <xs:pattern value="[A-Z]{1}[0-9]{1}[A-Z]{1} [0-9]{1}[A-Z]{1}[0-9]{1}"/>
    </xs:restriction>
</xs:simpleType>

В приведенном ниже вопросе рассматривается шаблон, требующий строки с содержимым.

Например, см .:

0 голосов
/ 09 декабря 2015

вы можете использовать параметр minOccurs

...