Я работаю на сервере 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"
>