问题
如果您检查TriggerTime
元素,您会看到有一个元素和属性称为TimeDate
. 这在 XML 中不是问题,但默认情况下,JAXB 实现会尝试将这两个项目映射到导致冲突的同一个 Java 属性。
<xsd:element name="TriggerTimer">
<xsd:annotation>
<xsd:documentation>BPMN: If the Trigger Type is Timer then this must be present</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:element name="TimeDate" type="xpdl:ExpressionType"/>
<xsd:element name="TimeCycle" type="xpdl:ExpressionType"/>
</xsd:choice>
<xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="TimeDate" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation>Deprecated</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="TimeCycle" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation>Deprecated</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:anyAttribute namespace="##other" processContents="lax"/>
</xsd:complexType>
</xsd:element>
解决方案 (binding.xml)
外部绑定文件可用于自定义 JAXB 实现如何生成从 XML 模式建模的 Java。下面是一个重命名生成的属性之一的示例:
<jxb:bindings
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="bpmnxpdl_40a.xsd">
<jxb:bindings node="//xsd:element[@name='TriggerTimer']/xsd:complexType/xsd:attribute[@name='TimeDate']">
<jxb:property name="timeDateAttr"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
XJC 呼叫
该-b
选项用于在使用 XJC 实用程序时指定绑定文件。
xjc -b binding.xml bpmnxpdl_40a.xsd