XSD выбор в Wsdl, производящем ошибку - PullRequest
2 голосов
/ 24 мая 2011

В настоящее время я работаю над проектом wsdl / soap с использованием Java / apache cxf. В файле wsdl часть xsd содержит внешний файл xsd.
Когда я строю свой файл (используя wsdl2java) все работает нормально. Однако, когда я пытаюсь открыть веб-страницу и использовать javascript, сгенерированный cxf, у меня появляется следующая ошибка:

May 24, 2011 11:34:32 AM org.apache.cxf.common.xmlschema.XmlSchemaUtils unsupportedConstruct
SEVERE: GROUP_CHILD
May 24, 2011 11:34:32 AM org.apache.cxf.transport.http_jetty.JettyHTTPDestination doService
WARNING: writeResponse failed: 
org.apache.cxf.common.xmlschema.UnsupportedConstruct: GROUP_CHILD
...

Я попытался отловить ошибку и нашел что-то в следующем блоке:

<xsd:complexType name="Scenario">
    <xsd:sequence>
    <xsd:element name="description" type="tns:Description" minOccurs="0"/>
        <xsd:choice>
            <xsd:element name="coordinates_center_position" type="tns:GeoCoord3D"/>
            <xsd:element name="coordinates_center_position_link" type="tns:FileLink"/>
        </xsd:choice>
        <xsd:choice minOccurs="0">
            <xsd:element name="environment_parameters" type="tns:EnvironmentParameters"/>
            <xsd:element name="environment_parameters_link" type="tns:FileLink"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
            <xsd:element name="entity_object" type="tns:EntityObject"/>
            <xsd:element name="entity_object_link" type="tns:FileLink"/>
        </xsd:choice>
    </xsd:sequence>
</xsd:complexType>

Последний вариант вызывает ошибку, но ошибка исчезает (и все работает нормально), если я комментирую один из элементов 2 (закомментированный элемент может быть любым).

Я что-то упустил из-за поведения cxf или xsd? Или это ошибка?

П.С .: Я относительно новичок во всем этом, поэтому, если вам нужно что-то еще, чтобы избежать этого, или если я не достаточно ясен, просто скажите мне.

Спасибо.

1 Ответ

0 голосов
/ 20 августа 2011

Я бы попытался заменить повторяющийся xsd: choice, используя приведенную ниже схему. Технически они эквивалентны - но это может обойти вас без ограничений - поскольку это может быть связано с использованием xsd: choice.

Это:

<xsd:choice minOccurs="0" maxOccurs="unbounded">
    <xsd:element name="a"/>
    <xsd:element name="b"/>
</xsd:choice>

можно заменить на:

<xsd:sequence maxOccurs="unbounded">
    <xsd:element name="a" minOccurs="0"/>
    <xsd:element name="b" minOccurs="0"/>
</xsd:sequence>
...