2013-04-04 2 views
1

Я пытаюсь преобразовать XSD. Я не могу управлять классами Java с помощью JAXB. Ошибки я получаю являются:Проблемы, связанные с преобразованием XSD в Java с использованием JAXB

[ERROR] cvc-pattern-valid: Value 'true' is not facet-valid with respect to pattern '0|1' for type 'BooleanType'. 
    line 139 of http://neon/meaweb/schema/common/meta/MXMeta.xsd 

[ERROR] a-props-correct.2: Invalid value constraint value '1' in attribute 'mxencrypted'. 
    line 139 of http://neon/meaweb/schema/common/meta/MXMeta.xsd 

код в XSD, который содержит ошибку в:

<xsd:complexType name="MXCryptoType"> 
    <xsd:simpleContent> 
     <xsd:extension base="xsd:base64Binary"> 
     <xsd:attribute name="changed" type="ChangeIndicatorType" use="optional" /> 
     <xsd:attribute name="mxencrypted" type="BooleanType" use="optional" default="1" /> 
     </xsd:extension> 
    </xsd:simpleContent> 

В частности, это атрибут mxencrypted с помощью BooleanType. BooleanType определяется как

<xsd:simpleType name="BooleanType"> 
    <xsd:restriction base="xsd:boolean"> 
     <xsd:pattern value="0|1" /> 
    </xsd:restriction> 
    </xsd:simpleType> 

От поиска вокруг этого, кажется, довольно распространенный случай. Из того, что я могу сказать, значение по умолчанию в mxencrypted строке не должно быть 1? Когда я загружаю XSD в Liquid XML, схема не сообщает об ошибках. Проверка XSD здесь (http://www.utilities-online.info/xsdvalidation/#.UV3zkL_EW0s) сообщает те же ошибки, что и JAXB.

Есть ли способ сказать JAXB игнорировать эту проблему и просто сгенерировать класс, игнорирующий значение по умолчанию?

ответ

0

Ваш вопрос аналогичен this one (и я только что обновил его с соответствующей информацией). Я не знаю, как сказать JAXB игнорировать его, поскольку эта ошибка возникает в процессоре схемы XSD (до того, как xjc JAXB начинает выполнять свою работу на самом деле).

Единственный способ - отфильтровать атрибуты по умолчанию; однако в этом случае очевидно, что разработчик XSD должен иметь значение по умолчанию true, что не соответствует вашему сгенерированному коду (Java по умолчанию - false).

Это может привести к нежелательным разрывам, моя рекомендация заключалась бы в том, чтобы работать с поставщиком XSD, чтобы устранить его.

Может быть, боковая панель, но я лично считаю использование по умолчанию в XSDs как совместимости монстр: любая XML-процессор, который не опирающиеся на XSD будет вести себя иначе, чем тот, который делает.

Смежные вопросы