Если у меня есть простой класс, такой как:-
@XmlRootElement
public class MyClass
{
@XmlAttribute(required=true)
private String myattribute
}
Действительно ли возможно проверить соответствующий xml документ БЕЗ схемы XML т.е. использования только аннотаций?
Хороший вопрос. Насколько мне известно, атрибут required
генерируется XJC, когда он находит необязательный тип схемы, и я думаю, что он также используется генератором схемы. Однако во время выполнения он ни для чего не используется, не служа никакой другой цели, кроме документальной аннотации.
Одна вещь, которую вы могли бы рассмотреть, - это параметры обратного вызова среды выполнения JAXB . В этом случае вы можете просто определить метод afterUnmarshal ()
в MyClass
, который программно проверяет состояние объекта, генерируя исключение, если оно ему не нравится. См. Ссылку выше, чтобы узнать о других вариантах, включая регистрацию отдельных классов валидаторов.
Сказав это, проверка по схеме действительно лучший способ. Если у вас его нет, подумайте о его написании.Инструмент schemagen может сгенерировать схему из вашей объектной модели, которую вы затем можете изменить, чтобы добавить любые ограничения, которые вам нравятся. Надеюсь, что schemagen
сгенерирует обязательные элементы схемы из полей вашего класса required = true
.