多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
相关产品推荐
相关产品推荐

