2

私はこの xsd スキーマを持っています:

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="1.0">

<xs:annotation>
    <xs:appinfo>
        <jaxb:globalBindings choiceContentProperty="true"/>
    </xs:appinfo>
</xs:annotation>

<xs:element name="request1">
    <xs:complexType>
        <xs:choice>
            <xs:sequence>
                <xs:element name="request2">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element type="xs:string" name="field1"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="request3">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element type="xs:string" name="field2"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>

            <xs:element name="request4">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element type="xs:string" name="field3"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>

        </xs:choice>
    </xs:complexType>
</xs:element>

そして、Cxf codegen プラグインで生成されたクラスをList<Object>. しかし、request1 クラスで getter と setter を使用して request2、request3、request4 フィールドを取得する必要があります。可能です?

4

1 に答える 1

3

実際には、 を設定choiceContentPropertyするtrueと、要素が 1 つのプロパティ ( List<Object>) にマップされます。に設定するとfalse動作が変わります。つまり、要素は個々のプロパティにラップされます。これについては、こちらで詳しく説明しています。

XSD を変更できない場合は、外部バインディング ファイルの使用を検討する必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <jxb:globalBindings choiceContentProperty="false" />
</jxb:bindings>

注: この動作はグローバルにのみ設定できるため、変更すると他の要素にも影響を与える可能性があります。

于 2014-04-11T06:48:10.943 に答える