gpt4 book ai didi

java - 如何使用 Spring 的 PayloadValidatingInterceptor 验证多个 XSD 模式

转载 作者:行者123 更新时间:2023-12-01 20:13:14 25 4
gpt4 key购买 nike

我有一个带有多个 XSD 架构的 Spring Boot 项目(我正在使用 Spring-WS)。

如果我使用 Spring 的 PayloadValidatingInterceptor 来验证请求和响应,它仅适用于最新的设置模式。

例如:

public void addInterceptors(List<EndpointInterceptor> interceptors) {
PayloadValidatingInterceptor validatingInterceptor = new PayloadValidatingInterceptor();
validatingInterceptor.setValidateRequest(true);
validatingInterceptor.setValidateResponse(true);
validatingInterceptor.setXsdSchema(getFirstSchema());
validatingInterceptor.setXsdSchema(getSecondSchema());
interceptors.add(validatingInterceptor);
super.addInterceptors(interceptors);
}

此代码片段将使 Spring 仅验证第二个模式,而不是第一个模式。我尝试创建多个 PayloadValidatingInterceptors 以使用 super.addInterceptors(interceptors); 添加它们,但它也不起作用。我能找到的唯一回复(使用 Java 而不是 XML)来自 2009 年:

https://jira.spring.io/browse/SWS-481

有人知道基于 Java 的解决方案来验证同一项目中多个 XSD 的请求和响应吗?

最佳答案

发布解决方案以供将来引用,因为我无法在互联网上找到单个示例。

为了验证多个模式,我这样做了:

我最终使用了 validatingInterceptor.setXsdSchemaCollection(),而不是 validatingInterceptor.setXsdSchema()。

它接收一个 XsdSchemaCollection,您需要实例化并实现 2 个匿名方法,如下所示:

    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;
}
};

getSchemas() 方法返回一个资源数组,您可以从中传递当前的 XSD 进行验证:

public Resource[] getSchemas() {
List<Resource> schemaResources = new ArrayList<>();
schemaResources.add(new ClassPathResource("firstService.xsd"));
schemaResources.add(new ClassPathResource("secondService.xsd"));
schemaResources.add(new ClassPathResource("thirdService.xsd"));
return schemaResources.toArray(new Resource[schemaResources.size()]);
}

关于java - 如何使用 Spring 的 PayloadValidatingInterceptor 验证多个 XSD 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46330546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com