Этот фрагмент wsdl незаконен? - PullRequest
0 голосов
/ 26 октября 2011

Я чешу голову. Этот WSDL генерируется CXF. Ему понравились входные файлы WSDL и схемы, но SOAPUI жалуется, когда я пытаюсь создать тестовый проект. Весь wsdl слишком длинный, но вот часть, которая совпадает с сообщениями об ошибках:

<xs:complexType name="RelatedResourcesType">
    <xs:sequence>
      <xs:element minOccurs="0" name="RelatedResource">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="tns:CompoundResourceIdentifierType">
              <xs:sequence>
                <xs:element minOccurs="0" name="link">
                  <xs:complexType>
                    <xs:sequence/>
                    <xs:attribute ref="ns3:type" xmlns:ns3="http://www.w3.org/1999/xlink"/>
                    <xs:attribute ref="ns4:href" use="required" xmlns:ns4="http://www.w3.org/1999/xlink"/>
                    <xs:attribute ref="ns5:role" xmlns:ns5="http://www.w3.org/1999/xlink"/>
                    <xs:attribute ref="ns6:title" xmlns:ns6="http://www.w3.org/1999/xlink"/>
                    <xs:attribute ref="ns7:label" xmlns:ns7="http://www.w3.org/1999/xlink"/>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
        ...


...

Ошибка: не удалось найти атрибут 'type @ http://www.w3.org/1999/xlink' Вы хотите сослаться на атрибут с именем type @ http://dws.sec?

Ошибка: атрибут 'href @ http://www.w3.org/1999/xlink' не найден

Ошибка: не удалось найти атрибут 'role @ http://www.w3.org/1999/xlink' Вы хотите сослаться на атрибут с именем role @ http://www.w3.org/2003/05/soap-envelope?

Ошибка: не удалось найти атрибут 'title @ http://www.w3.org/1999/xlink' Вы хотите сослаться на атрибут с именем title @ http://metadata.esd.com/?

Ошибка: не удалось найти атрибут 'label' * http://www.w3.org/1999/xlink' Вы хотите сослаться на атрибут с именем title @ http://metadata.esd.com/?

Так что все это должно происходить из определения xlink, и я не уверен, почему он этого не видит. Какие-нибудь мысли? или предложения, что попробовать дальше?

1 Ответ

1 голос
/ 02 ноября 2011

Мне удалось внести изменения, которые позволили Visual Studio 2008 получить WSDL с сервера и сгенерировать код.Шаги были

1) Настройте CXF для отображения исходных файлов WSDL вместо сгенерированной версии 2) Измените импортированные схемы, чтобы они были встроенными в WSDL, пока Visual Studio не будет довольна

Подробности:

1) В файле конфигурации CXF добавьте атрибут wsdlLocation

<jaxws:endpoint xmlnse="urn:discovery.services.sec.com"
    id="DiscoveryImpl"
    endpointName="e:discovery"
    serviceName="e:DiscoveryService"
    address="discovery"
    implementor=com.sec.services.discovery.DiscoveryImpl"
    wsdlLocation="WEB-INF\discovery.wsdl
>

Существует несколько способов указать расположение WSDL.Google Code Search был полезен.

2) Начался оригинальный WSDL ...

Удаление импорта выше, результат

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions ...>
    <wsdl:types>
        <xsd:schema ..> <!-- Discovery.xsd contents here -->
                ...
        </xsd:schema>   
    </xsd:types>
        <xsd:schema ..>
            <!-- import of Discovery.xsd removed from here -->
                ...
        </xsd:schema>   
    </xsd:types>
    <wsdl:message ...>

Я надеюсьэто еще немного экономит время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...