|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT | |||||||||
@Target(value={METHOD,PARAMETER})
@Retention(value=RUNTIME)
public @interface MOPolymorphicAtomPropertyDefines an atomic property that is polimorphic - it can take more then one Java type. The XML representation of polimorphic atomic properties is using the XML Union construct.
When reading the XML representation, the order of defining the MOPolymorphicAtomType annotations becomes
important - the matching is done by order. In the following example, if we replace the order of the
MOPolymorphicAtomType annotations, numbers will never be read as numbers, because all number values are
also valid string values.
For instance, the simplest of example is a Java property that can take a value of a String or an
integer (int). Normally, such a property is created with the Object class in Java.
Such a property is mapped as follows:
@MOProperty()
@MOPolymorphicAtomProperty({
@MOPolymorphicAtomType(Integer.class),
@MOPolymorphicAtomType(String.class)})
public Object getStringOrInt1() {
return stringOrInt1;
}
The corresponding XML schema is then
<xs:element name="stringOrInt1">
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:int">
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:string">
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:element>
Polymorphic atomic properties can be used anywhere other atomic properties can be used. In addition, for each
polymorphic type, we can define additional constraints (see MOPolymorphicAtomType).
A more complex example - usage of polymorphic atomic property as a collection item, with additional constraints
@MOProperty()
@MOXmlListStyle()
@MOPolymorphicAtomProperty({
@MOPolymorphicAtomType(value = Integer.class, xmlDerivedType = @MOXmlDerivedType(MoXmlBaseSimpleType.xmlUnsignedShort)),
@MOPolymorphicAtomType(value = String.class, validationString = @MOValidationString(minLength = 3))})
public List<Object> getPolymorphicListAsListStyle() {
return polymorphicListAsListStyle;
}
will be mapped using the following XML schema
<xs:element name="polymorphicListAsListStyle">
<xs:simpleType>
<xs:list>
<xs:simpleType>
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:unsignedShort">
</xs:restriction>
</xs:simpleType>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="3"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:list>
</xs:simpleType>
</xs:element>
MOProperty,
MOPolymorphicAtomType| Required Element Summary | |
|---|---|
MOPolymorphicAtomType[] |
value
the list of possible values this property can take. |
| Element Detail |
|---|
public abstract MOPolymorphicAtomType[] value
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT | |||||||||