如何使用PayloadValidatingInterceptor

时间:2019-06-01 09:21:01

标签: spring-boot validation soap

我使用基本身份验证来处理服务器SOAP Web服务。有些端点必须未经身份验证才可访问,而其他端点则必须经过身份验证。为了简化处理身份验证,我使用了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"));
    }

但是对于具有XsdSchemaCollection()的2个模式,下面的代码不起作用,只有对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"
>

0 个答案:

没有答案