netbeans jaxb marshaller不生成xsi:nil

时间:2011-09-01 07:24:02

标签: java jaxb marshalling xml-nil

我有下一个问题。我的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>

可以看出,我有一个名为“Code”的元素,类型为xs:string,其中nillable = true,属性为“return”。

当我从xsd shema生成java对象时,我设置了绑定参数:

<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;

当我执行编组时,如果我没有初始化元素“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>

因为没有设置值(我尝试将null或空字符串(“”)),我希望下一个XML结构:

<SearchEvents xmlns="http://company/searchevents.xsd">
  <Code return="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</SearchEvents>

为什么我没有得到这样的结果。我错过了什么吗?

祝你好运

托马日

0 个答案:

没有答案