XJC似乎完全忽略了我的
XML Schema元素上的mixed =“true”,因此不允许我提取文本内容.从下面的示例XML中,我需要能够提取“标题文本”.如果没有识别mixed =“true”,则不会创建任何访问器,也不会从XML中解组:
<?xml version="1.0" encoding="UTF-8"?> <title xmlns="urn:hl7-org:v3" integrityCheck="true">Title Text</title>
这是一个完整但最小化的模式,用于演示此问题:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <xs:schema targetNamespace="urn:hl7-org:v3" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:hl7-org:v3" xmlns:mif="urn:hl7-org:v3/mif" elementFormDefault="qualified"> <xs:complexType name="ST" mixed="true"> <xs:complexContent> <xs:restriction base="ED"> <xs:sequence> <xs:element name="reference" type="xs:string" minOccurs="0" maxOccurs="0"/> <xs:element name="thumbnail" type="xs:string" minOccurs="0" maxOccurs="0"/> </xs:sequence> <xs:attribute name="compression" type="xs:string" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="ED" mixed="true"> <xs:complexContent> <xs:extension base="BIN"> <xs:sequence> <xs:element name="reference" type="xs:string" minOccurs="0" maxOccurs="1" /> <xs:element name="thumbnail" minOccurs="0" maxOccurs="1" type="xs:string" /> </xs:sequence> <xs:attribute name="compression" type="xs:string" use="optional" /> <xs:attribute name="integrityCheck" type="xs:string" use="optional" /> <xs:attribute name="integrityCheckAlgorithm" type="xs:string" use="optional" default="SHA-1" /> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="BIN" abstract="true" mixed="true"> <xs:complexContent> <xs:extension base="ANY"> <xs:attribute name="representation" use="optional" type="xs:string" default="TXT" /> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="ANY" abstract="true"> <xs:attribute name="nullFlavor" type="xs:string" use="optional" /> </xs:complexType> <xs:element name="title" type="ST" /> </xs:schema>
请注意,在上面我混合了=“true”.尽管如此,生成的模式片段不包含对它的引用,生成的类也不使用XmlMixed批注,也不使用值或内容访问器:
/** * <p>Java class for ST complex type. * * <p>The following schema fragment specifies the expected content contained within this class. * * <pre> * <complexType name="ST"> * <complexContent> * <restriction base="{urn:hl7-org:v3}ED"> * <sequence> * <element name="reference" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="0" minOccurs="0"/> * <element name="thumbnail" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="0" minOccurs="0"/> * </sequence> * </restriction> * </complexContent> * </complexType> * </pre> * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "ST") public class ST extends ED { }
为什么XJC / JAXB完全无视我的混合内容字段?我已经尝试了JAXB 2.1和JAXB 2.2,但生成的代码中只存在微不足道的差异.
注意:我无法更改架构,因为实际架构是符合标准的医疗保健(HL7)架构.
经过更多的研究,我无能为力,只能得出结论,这是我提交的一个错误.它被承认为
JAXB issue #792.