Можно ли установить значение атрибута xml на фиксированное значение при переопределении базового типа?
Например, мой базовый тип выглядит следующим образом:
<xs:complexType name="Parameter" abstract="true">
... stuff that all parameters have in common ...
<xs:attribute name="parameterType" type="ax21:parameterType"/>
</xs:complexType>
Тип parameterType - это перечисление с двумя возможными значениями:
<xs:simpleType name="parameterType">
<xs:restriction base="xs:string">
<xs:enumeration value="singleParameter" />
<xs:enumeration value="arrayParameter" />
</xs:restriction>
</xs:simpleType>
Тип Параметр не должен использоваться, а служит только основой для двух сложных типов, расширяющих его:
<xs:complexType name="ParameterImpl1">
<xs:complexContent>
<xs:extension base="ax21:Parameter">
...stuff specific for this implementation of parameter...
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ParameterImpl2">
<xs:complexContent>
<xs:extension base="ax21:WS_Parameter">
...stuff specific for this implementation of parameter...
</xs:extension>
</xs:complexContent>
</xs:complexType>
И в этих подтипах я хотел бы установить для атрибута parameterType фиксированное значение.Есть ли возможность сделать это?
Кроме того, я хотел бы объяснить фон в моем случае - потому что я думаю, что может быть более простое решение всей моей проблемы:Я пишу файл WSDL, а тип Parameter используется в качестве входного параметра в операции.Он используется только в качестве интерфейса для двух расширяющих его типов, но при обработке запроса веб-службы в моем коде Java-сервера (создан Axis2) я получаю только объект Parameter и не могу найтилюбой способ определить, какой из двух конкретных подтипов фактически был передан в запросе.(За исключением ручного разбора xmlString объекта Parameter , которого я хочу избежать)
Надеюсь, мои объяснения достаточно точны - просто скажите, если вам нужна дополнительная информация или вы не понимаете, чтоЯ пытаюсь сделать.
Заранее спасибо!
Обновление: После дополнительных исследований по этой теме я думаю, что единственный способ сделать что-то подобное - это использовать Наследование по ограничению и Полиморфизм , как описано в этой статье:http://www.ibm.com/developerworks/library/x-flexschema/
Таким образом, в этом случае базовый тип содержит атрибут, а наследующие классы «переопределяют» его, устанавливая фиксированное значение.