【问题标题】:One set of JAXB classes for two equal namespaces一组用于两个相同名称空间的 JAXB 类
【发布时间】:2013-10-02 18:23:26
【问题描述】:

我正在使用来自具有两个端点的 Web 服务的数据 - 一个是测试端点,另一个是生产端点(我无法修改它)。问题是生产和测试端点在根元素中有不同的“xmlns”。因此,如果 XSD 用于测试,则 JAXB 无法解析 prod 响应,反之亦然。

使用 Spring RestTemplate 和 Jaxb2Marshaller 使用数据。

用于测试的示例文档片段:

<element xmlns="https://example.com/test"

prod 的示例文档片段:

<element xmlns="https://example.com/prod"

允许使用来自测试/生产端点的数据的正确方法是什么?

【问题讨论】:

    标签: java xml jaxb xsd


    【解决方案1】:

    首先,抱怨为测试和生产使用不同的命名空间太疯狂了。

    然后检查http://blog.bdoughan.com/2012/11/applying-namespace-during-jaxb-unmarshal.html

    从生产 XSD 生成架构。对于测试端点,您需要通过添加自定义 org.springframework.http.converter.xml.MarshallingHttpMessageConverter 来配置 RestTemplate 正在使用的 JAXBContext(用于编组和解组)。

    您的自定义 NamespaceFilterstartElementendElement 方法应检查您尝试替换的命名空间,并在必要时替换它。

    【讨论】:

    • 另一种方法是使用 XSLT 预处理 XML
    • @volodymyr 是的,这也行得通……我怀疑这会更努力
    猜你喜欢
    • 2014-08-02
    • 2018-01-17
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多