Можно ли выполнить проверку для одного JAXB-аннотированного класса - PullRequest
0 голосов
/ 14 мая 2018

У нас есть большое количество классов, использующих JAXB для сериализации, и мы не использовали никаких проверок для них во время процесса маршалинга или демаршаллинга. Изучал на JAXB встроенный механизм для проверки с использованием метода заданной схемы. Теперь, поскольку у меня есть большое количество классов моделей JAXB, генерация схемы для большого количества классов приведет к сложной схеме. Попытка выяснить, существует ли идеальный вариант, с помощью которого проверка может быть выполнена для определенного класса только в схеме, и игнорировать остальные?

У меня есть следующие строки кода,

    SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema;

    JAXBContext jc;
    try {
        jc = JAXBContext.newInstance(MyClass.class);
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        schema = sf.newSchema(new File("c:\\schema1.xsd"));
        unmarshaller.setSchema(schema);
        unmarshaller.setEventHandler(new ValidationEventHandler() {

            @Override
            public boolean handleEvent(ValidationEvent event) {
                if (event == null) {
                    return true;
                }
                String line = "unknown"; //$NON-NLS-1$
                String col = "unknown"; //$NON-NLS-1$
                ValidationEventLocator locator = event.getLocator();
                if (locator != null) {
                    line = Integer.toString(locator.getLineNumber());
                    col = Integer.toString(locator.getColumnNumber());
                }
                return true;
            }
        });
        unmarshaller.unmarshal(new File("C:\\Temp\\Test\\Test.xml"));

Я автоматически сгенерировал schema1.xsd для MyClass.java, перейдя по ссылке Можно ли сгенерировать XSD из класса, аннотированного JAXB? Теперь, в моем случае, существует множество других классов JAXB модели, кроме MyClass.java, поэтому событие вызывается для всех тех, кто указывает на ошибку, которую я не хочу. Как я могу ограничить схему только для одного класса JAXB? Это возможно? Заранее спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...