我正在使用来自具有两个端点的 Web 服务的数据 - 一个是测试端点,另一个是生产端点(我无法修改它)。问题是生产端点和测试端点在根元素中具有不同的“xmlns”。因此,如果 XSD 适用于测试,那么 JAXB 将无法解析产品响应,反之亦然。
使用 Spring RestTemplate 和 Jaxb2Marshaller 使用数据。
用于测试的示例文档片段:
<element xmlns="https://example.com/test"
prod 的示例文档片段:
<element xmlns="https://example.com/prod"
允许使用来自测试/生产端点的数据的正确方法是什么?
最佳答案
首先,提示为测试和生产使用不同命名空间的疯狂行为。
然后检查http://blog.bdoughan.com/2012/11/applying-namespace-during-jaxb-unmarshal.html .
从生产 XSD 生成架构。对于测试端点,您需要通过添加自定义 org.springframework.http.converter.xml.MarshallingHttpMessageConverter
配置 RestTemplate 使用的 JAXBContext(用于编码和解码)。
您的自定义 NamespaceFilter
的 startElement
和 endElement
方法应该检查您尝试替换的命名空间,并在必要时替换它.
关于java - 一组用于两个相同命名空间的 JAXB 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19133252/