Как проверить несколько схем XSD с PayloadValidatingInterceptor - PullRequest
0 голосов
/ 01 июня 2019

Я работаю на сервере SOAP webservice с базовой аутентификацией.Некоторые конечные точки должны быть доступны без аутентификации, а другие с аутентификацией.Чтобы упростить аутентификацию дескриптора, я использовал 2 схемы, одну для анонимных пользователей и одну для аутентифицированных пользователей.Моя проблема заключается в проверке двух схем.

Пожалуйста, не могли бы вы помочь мне.

Я использую конфигурацию, которая расширяет WsConfigurerAdapter.

@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
...
}

Я переопределяю метод addInterceptors для добавления PayloadValidatingInterceptor,Только с одной схемой он работает с методом setXsdSchema ()

 @Override
    public void addInterceptors(List<EndpointInterceptor> interceptors) {
        PayloadValidatingInterceptor validatingInterceptor = new CustomValidatingInterceptor();
        validatingInterceptor.setValidateRequest(true);
        validatingInterceptor.setValidateResponse(true);
        validatingInterceptor.setXsdSchema(anonymousSchema());
        interceptors.add(validatingInterceptor);
}

    @Bean
    public XsdSchema anonymousSchema() {

        return new SimpleXsdSchema(new ClassPathResource("xsd/anonymous.xsd"));
    }

Но с 2 схемами с XsdSchemaCollection () приведенный ниже код не работает, только проверка последней схемы, включенной в XsdSchemaCollectionработает.

        XsdSchemaCollection schemaCollection = new XsdSchemaCollection() {

            @Override
            public XsdSchema[] getXsdSchemas() {
                return null;
            }

            @Override
            public XmlValidator createValidator() {
                try {
                    XmlValidator xmlValidator = XmlValidatorFactory.createValidator(getSchemas(), "http://www.w3.org/2001/XMLSchema");

                    return xmlValidator;
                } catch (IOException e) {
                    logger.error(e.getLocalizedMessage());

                }
                return null;
            }
        };
        validatingInterceptor.setXsdSchemaCollection(schemaCollection);
        try {
            validatingInterceptor.afterPropertiesSet();
        } catch (Exception e) {
            e.printStackTrace();
        }
        interceptors.add(validatingInterceptor);

Я получаю приведенную ниже ошибку при попытке выполнить действие в первой схеме: Ошибка проверки XML при ответе: cvc-elt.1

Я тоже пытался с CommonsXsdSchemaCollection, но та же ошибка.

Здесь верхняя часть заголовка для этих схем:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://bibliows/service/biblio-producing-web-service"
           targetNamespace="http://bibliows/service/biblio-producing-web-service" elementFormDefault="qualified"
>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...