I was working on using MyBatis with pre-existing classes and i ran into the problem that according to the DTD idArgs need to come before args in the constructor.
This following example doesn't validate, although MyBatis doesn't actually have this restriction:
<resultMap id="MyClass" type="test.MyClass">
<constructor> <!-- Error: The content of element type "constructor" must match "(idArg*,arg*)". -->
<arg column="name" javaType="string" />
<idArg column="id" javaType="string" />
</constructor>
</resultMap>
Can mybatis-3-mapper.dtd be changed from:
<!ELEMENT constructor (idArg*,arg*)>
to
<!ELEMENT constructor ((idArg|arg)*)>
Comment From: Condor70
I just noticed that MyBatis has an XSD as well, which also would need to change:
Current mybatis-mapper.xsd:
<xs:element name="constructor">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="idArg"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="arg"/>
</xs:sequence>
</xs:complexType>
</xs:element>
New mybatis-mapper.xsd:
<xs:element name="constructor">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="idArg"/>
<xs:element ref="arg"/>
</xs:choice>
</xs:complexType>
</xs:element>
Comment From: harawata
Hello @Condor70 ,
I didn't know this was possible with DTD. Would you send us a PR? If you are busy, please just let me know and I'll take care of it later.
FYI, if you specify name
, the order of idArg
/arg
does not matter.
See #721