У меня следующая проблема. Моя XSD-схема «searchevents.xsd»:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified"
targetNamespace="http://company/searchevents.xsd"
xmlns="http://company/searchevents.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="SearchEventType">
<xs:sequence>
<xs:element minOccurs="0" name="Code" nillable="true" type="StringType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="StringType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute default="false" name="return"
type="xs:boolean" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="SearchEvents" type="SearchEventType"/>
</xs:schema>
Видно, что у меня есть один элемент с именем "Код", который имеет тип xs: string с nillable = true и атрибутом return.
Когда я генерирую Java-объекты из XSD Shema, я устанавливаю параметр привязки:
<globalBindings generateElementProperty="false">
Класс StringType был создан со следующим синтаксисом:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "StringType", propOrder = { "value" })
public class StringType {
@XmlValue
protected String value;
@XmlAttribute(name = "return")
protected Boolean _return;
...
и
класс SearchEventType включает следующую часть кода:
@XmlElement(name = "Code", nillable = true)
protected StringType code;
Когда я выполняю маршалинг, если я не инициализирую элемент «Код», я получаю следующую структуру XML (что в порядке)
<SearchEvents xmlns="http://company/searchevents.xsd">
<Code xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</SearchEvents>
Когда я устанавливаю значение элемента и атрибут, я получаю следующий XML (который в порядке):
<SearchEvents xmlns="http://company/searchevents.xsd">
<Code return="true">asdf</Code>
</SearchEvents>
Проблема в том, когда я устанавливаю атрибут, а я не устанавливаю значение. Я получаю следующий XML (который не в порядке):
<SearchEvents xmlns="http://company/searchevents.xsd">
<Code return="true"/>
</SearchEvents>
Поскольку значение не установлено (я пытаюсь поставить пустую или пустую строку ("")), я ожидаю следующую структуру XML:
<SearchEvents xmlns="http://company/searchevents.xsd">
<Code return="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</SearchEvents>
Почему я не получаю такой результат. Я что-то пропустил?
С уважением
Tomaz