有没有办法忽略 JAXB 绑定文件中的空节点?
Is there a way to ignore empty nodes in JAXB bindings file?
我正在尝试创建一个通用的 .xjb
绑定文件,以跨多个项目从 WSDL/XSD 提供一致的 Java classes 生成。
我们通过 maven-jaxb2-plugin
(由@lexicore 制作)生成代码。
问题出在多个项目部分。如果特定绑定指令与提供的 XSD 或 WSDL 中的任何内容都不匹配,则 class 生成失败并显示
XPath evaluation of "<some_xpath_expression>
" results in empty target node
我如何告诉 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
元素的模式生成 classes,它将失败。
objective 最终是要创建一些不同团队的所有项目都可以重用的东西,除了 schemaLocation
。
您需要在您希望允许不匹配任何节点的绑定上设置 required="no" 属性,即
<jxb:bindings required="no" multiple="true" node="//*[@type='xs:dateTime']">
根据您的上下文,您也可以选择说 required="false" 或 required="0"。
我正在尝试创建一个通用的 .xjb
绑定文件,以跨多个项目从 WSDL/XSD 提供一致的 Java classes 生成。
我们通过 maven-jaxb2-plugin
(由@lexicore 制作)生成代码。
问题出在多个项目部分。如果特定绑定指令与提供的 XSD 或 WSDL 中的任何内容都不匹配,则 class 生成失败并显示
XPath evaluation of "
<some_xpath_expression>
" results in empty target node
我如何告诉 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
元素的模式生成 classes,它将失败。
objective 最终是要创建一些不同团队的所有项目都可以重用的东西,除了 schemaLocation
。
您需要在您希望允许不匹配任何节点的绑定上设置 required="no" 属性,即
<jxb:bindings required="no" multiple="true" node="//*[@type='xs:dateTime']">
根据您的上下文,您也可以选择说 required="false" 或 required="0"。