NetBeans Jaxb маршаллер не генерирует XSI: ноль - PullRequest
1 голос
/ 01 сентября 2011

У меня следующая проблема. Моя 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

...