我有两个类似的第三方服务(来自同一供应商),它们通过XML将数据发送到我们的应用程序.这两个XML文件基本上遵循相同的 struct ,但在标记的深处有一个细微的不同.
一项服务发送的XML如下所示:
<node>
<value>
<![CDATA[The value]]>
</value>
</node>
而另一个则有更复杂的需求,并像这样发送:
<node>
<value>
<subValue>subValue</subValue>
<description>my description</description>
</value>
</node>
我们的正常过程是创建一个XSD文件,然后使用IntelliJ工具"使用JAXB从XML模式生成Java代码"为它生成所需的POJO类.然而,这两个文件都有一个"Value"标记,但具有不同的数据类型(一个字符串,一个复杂 struct ),似乎这种情况在XSD的概念中是不允许的.我还没有找到一种方法来说服IntelliJ或jaxb运行时库接受这种情况.
我try 在xsd文件中将"Value"声明为抽象的,并且有两个扩展"Value"的独立类型.这不起作用,因为在这两种情况下标记都被命名为"Value",解析器无法区分这两者.
我try 将第二个XML中的"Value"标记的整个内容作为字符串处理,然后将其作为单独的XML文件处理,但JAXB库不支持这一点.
"value"标记位于XML struct 的深处,否则它在两个服务中是相等的. 一种解决方案是为这两个服务生成一组新的XSD文件,但我们确实希望避免这种情况. 这将导致IntelliJ生成两组POJO类,因此我们需要完全复制解析逻辑(不希望)或为所有POJO创建包装器(繁琐).
在我看来,解决方案应该很简单,但我一直在撞墙.有什么提示或解决方案吗?