次の問題があります。私の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」という要素が1つあり、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;
マーシャリングを実行するときに、要素「コード」を初期化しない場合、次の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を取得します(これはOKではありません):
<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>
なぜ私はそのような結果が得られないのですか。私は何か見落としてますか?
よろしくお願いします
トマズ