我有一个模式,在
<xs:choice/>
块中包含两个元素,如以下片段所示:
<xs:complexType name="POCD_MT000040.Component2">
<xs:sequence>
<xs:element name="realmCode" type="CS" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="typeId" type="POCD_MT000040.InfrastructureRoot.typeId" minOccurs="0"/>
<xs:element name="templateId" type="II" minOccurs="0" maxOccurs="unbounded"/>
<xs:choice>
<xs:element name="nonXMLBody" type="POCD_MT000040.NonXMLBody"/>
<xs:element name="structuredBody" type="POCD_MT000040.StructuredBody"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="nullFlavor" type="NullFlavor" use="optional"/>
<xs:attribute name="typeCode" type="ActRelationshipHasComponent" use="optional" fixed="COMP"/>
<xs:attribute name="contextConductionInd" type="bl" use="optional" fixed="true"/>
</xs:complexType>
顺便说一下,这是 HL7/CDA 规范模式的一部分。
好吧,我使用
maven-jaxb2-plugin
来生成 Java 类,并使用 jaxb2-basics
插件来简化复杂元素,例如 nonXMLBody
和 structuredBody
。假设我有一个包含以下内容的绑定文件:
<jxb:bindings
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:simplify="http://jaxb2-commons.dev.java.net/basic/simplify"
jxb:extensionBindingPrefixes="xjc simplify"
version="2.1">
<jxb:globalBindings
typesafeEnumMaxMembers="1000"
generateMixedExtensions="true"
generateIsSetMethod="true"
choiceContentProperty="true">
<xjc:serializable uid="1" />
</jxb:globalBindings>
<jxb:bindings schemaLocation="xsd/POCD_MT000040.xsd">
<jxb:bindings node="xs:complexType[@name='POCD_MT000040.Component2']//xs:choice">
<simplify:as-element-property />
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
属性按预期生成:
protected POCDMT000040NonXMLBody nonXMLBody;
protected POCDMT000040StructuredBody structuredBody;
但是,虽然我在全局绑定中使用
generateIsSetMethod="true"
,但根本没有生成方法 isSetNonXMLBody ( )
和 isSetStructuredBody ( )
。不过,其余属性的等效方法也存在,例如 isSetTypeId ( )
。
我是否缺少任何我应该知道的在上述元素中生成这些方法的选项?
自从 jaxb2-basics 现已合并到 jaxb-tools 存储库后,在 jaxb-tools 存储库中创建了新问题:https://github.com/highsource/jaxb-tools/issues/453
我已经看到简化插件创建的属性不像 xjc 属性那样被包装,并且完成的包装负责像 isSet 方法这样的自定义。
我将在提供时用 PR 更新答案,然后在可能的情况下在完成时发布版本