Что-то не так с этим импортом XML?

Я использую WSDL, который вызывает проблемы для моего клиента SOAP (Python SUDS). До того, как разработчики добавили <xs:import> в WSDL мой SOAP-клиент работал, но теперь он душит мой SOAP-клиент.

Странно то, что некоторые пространства имен ссылаются на несуществующий URL-адрес для пространства имен. Хотя это не помогло, я смог вызвать методы SOAP, когда он работал.

Я чувствую, что импорт вызывает проблемы. Кто-нибудь может проверить, выглядит ли этот фрагмент WSDL правильным или действительным? Эта страница заставляет меня поверить, что schemaLocation атрибут необходим, но я бы даже не знал, что в него вставить.

<wsdl:definitions xmlns:ns1="http://org.apache.axis2/xsd" 
  xmlns:ns="http://sdk.mc.nonexistent.com" xmlns:nsv1="http://v1.sdk.mc.nonexistent.com" 
  xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
  xmlns:mcxsv1="http://v1.sdk.mc.nonexistent.com/xsd" 
  xmlns:mcxs="http://sdk.mc.nonexistent.com/xsd" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
  xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
  targetNamespace="http://sdk.mc.nonexistent.com">

<wsdl:types>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://sdk.mc.nonexistent.com/xsd">
  ...
</xs:schema>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://v1.sdk.mc.nonexistent.com/xsd">
  <xs:import namespace="http://sdk.mc.nonexistent.com/xsd"/>
  <xs:complexType name="MethodFault_v1">
    <xs:choice>
      <xs:element minOccurs="0" name="faultMessage" type="xs:string"/>
      <xs:element minOccurs="0" name="event" type="mcxs:EventMoref"/>
      <xs:element minOccurs="0" name="eventData" type="mcxs:EventData"/>
    </xs:choice>
  </xs:complexType>
...
</xs:schema>

1 ответ

Вы правы в том, что импорт является вероятным источником проблем. Пространства имен часто состоят из строк, которые выглядят как URL, хотя они используются просто как уникальные строки. Там, где URL-адрес действительно разрешается, он может помочь решить проблему, с которой вы столкнулись здесь, когда вы используете типы, определенные в пространстве имен.

Цель оператора import состоит в том, чтобы связать пространство имен с файлом схемы, в котором определены компоненты пространства имен. Правильный формат:

<xs:import namespace="http://sdk.mc.nonexistent.com/xsd" schemaLocation="{schema file URL}" />

где URL-адрес файла схемы может представлять собой имя файла в том же месте, что и wsdl, путь к файловой системе или какой-либо URL-адрес, доступный через сеть.

Можно использовать wsdl со ссылками на пространства имен без поддержки определений (схем), если никакие компоненты в WSDL не используют эти пространства имен. В этом случае типы EventMoref и EventData относятся к отсутствующей схеме, и без файла схемы WSDL не может быть использован должным образом.

Если у вас есть доступ к поставщикам услуг, вам лучше всего спросить местонахождение отсутствующей схемы.

Другие вопросы по тегам