Что делать, если Delphi неправильно импортирует WSDL из-за дефиса в имени перечисления? - PullRequest
7 голосов
/ 04 мая 2011

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

  <xsd:simpleType name="departStatus">
  <xsd:annotation>
   <xsd:documentation>Enumerates allowable departure statuses (DEPARTED, NOT-DEPARTED)</xsd:documentation>
   </xsd:annotation>
  <xsd:restriction base="xsd:string">
   <xsd:enumeration value="DEPARTED"/>
   <xsd:enumeration value="NOT-DEPARTED"/>
   </xsd:restriction>
   </xsd:simpleType>

Когда я генерирую прокси-класс, я получаю следующее:

  departStatus = (
      DEPARTED, 
      [System.Xml.Serialization.XmlEnumAttribute('NOT-DEPARTED')]
      NOTDEPARTED);

, который не компилируется, если я не удаляю строку, начинающуюся с [System.xml ..., и он не распознает "НЕ ОТПРАВЛЕНО" в качестве допустимого значения для отступления.Если я изменю «NOT-DEPARTED» на «NOT_DEPARTED» в файле wsdl и любой входящий xml-файл будет работать нормально, но компания, которая настроила это, настаивает на том, что «NOT-DEPARTED» действительна и не изменит его.Почему неправильно настраивается перечисление sentStatus?Есть идеи как обойти это?Заранее спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 05 мая 2011

У меня есть возможный обходной путь:

Поскольку departStatus имеет базовый тип xsd:string, вы сможете изменить все вхождения типа departStatus на xsd:string в файле WSDL.

Таким образом, вы можете передать / интерпретировать строку 'DEPARTED' или 'NON-DEPARTED' вместо использования enum.

1 голос
/ 04 мая 2011

Обновление Delphi SOAP Runtime и Importer

http://cc.embarcadero.com/Item/24535

0 голосов
/ 04 мая 2011

Если среда выполнения Delphi (.Net) не поддерживает дефисы в именах перечислений, я бы создал базовое тестовое приложение, используя Visual Studio и C #, чтобы выяснить, работает ли оно там.В зависимости от результата я хотел бы написать «прокси» сервис, который можно использовать из Delphi (.Net).Если поддержка веб-службы C # завершается неудачно с той же ошибкой, то в качестве последнего средства может быть выбран прокси-сервер Java.

Другая идея: отфильтровать данные HTTP веб-запроса / ответа и преобразовать орфографию "на лету".».

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