有没有办法忽略JAXB绑定文件中的空节点?

时间:2017-03-16 15:54:22

标签: jaxb xjc maven-jaxb2-plugin

我正在尝试创建一个通用的.xjb绑定文件,以便跨多个项目从WSDL / XSD生成一致的Java类。 我们通过maven-jaxb2-plugin生成代码(由@lexicore制作)。

问题出在多个项目部分。如果特定绑定指令在提供的XSD或WSDL中不匹配,则类生成将失败并显示

  

&#34; <some_xpath_expression>&#34;的XPath评估导致空目标节点

如何告诉JAXB忽略这些情况,以便无论使用哪种元素类型,绑定文件都可以在任何项目中使用而无需微调?

这是一个(精简版)展示我遇到的问题:

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1"                
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
              jxb:extensionBindingPrefixes="xjc">
    <jxb:bindings schemaLocation="path/to/the/schema" node="/xs:schema">
        <jxb:bindings multiple="true" node="//*[@type='xs:dateTime']">
            <xjc:javaType name="java.time.LocalDateTime" adapter="a.b.c.LocalDateTimeAdapter" />
        </jxb:bindings>
    </jxb:bindings>
</jxb:bindings>

如果我尝试从没有dateTime元素的模式生成类,它将失败。

最终,目标是创建一些东西,各个团队的所有项目都可以重用,而不会改变schemaLocation之外的任何内容。

1 个答案:

答案 0 :(得分:1)

您需要在您希望不允许与任何节点匹配的绑定上设置 required =“no”属性,即

<jxb:bindings required="no" multiple="true" node="//*[@type='xs:dateTime']">

根据您的具体情况,您可以选择 required =“false” required =“0”