我使用基本身份验证来处理服务器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"
>