You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多XSD文件JAXB继承报错:无指定ComplexType文件编译失败

解决JAXB绑定仅在XSD存在指定ComplexType时实现接口的问题

你只需要在绑定DetailInformation这个complexType的<jxb:bindings>标签里添加jxb:if-exists="true"属性,就能让继承逻辑变成可选的——只有当XSD中存在这个节点时,才会执行实现接口的绑定规则,不存在的话就跳过,不会抛出报错。

修改后的binding.xml代码如下:

<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
              jxb:extensionBindingPrefixes="inheritance"
              jxb:version="2.1">
    <jxb:bindings schemaLocation="{file}">
        <!-- 添加jxb:if-exists="true",让绑定规则仅在节点存在时生效 -->
        <jxb:bindings node="//xs:complexType[@name='DetailInformation']" jxb:if-exists="true">
            <inheritance:implements>com.theapplication.interfaces.Details</inheritance:implements>
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

这个if-exists属性是JAXB绑定规范的标准属性,作用是告诉绑定处理器:如果XPath表达式匹配不到目标节点,就忽略当前绑定块,不会抛出节点不存在的异常。这样你的3个XSD文件就能正常编译,只有包含DetailInformation的两个XSD生成的类会实现指定接口。

内容的提问来源于stack exchange,提问作者stromanneke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:03:20