Повторное использование глобального элемента из XML-схемы, но с другим типом

У меня сложная ситуация. Если вы посмотрите на схему для WS-Trust (в данном случае версию 2005), в частности, для операции RequestSecurityToken, то основное содержимое элемента RequestSecurityToken является общедоступным, выраженным в схеме как множество подстановочных знаков благость. То есть:

<xs:element name='RequestSecurityToken' type='wst:RequestSecurityTokenType' />
<xs:complexType name='RequestSecurityTokenType' >
  <xs:sequence>
    <xs:any namespace='##any' processContents='lax' minOccurs='0' maxOccurs='unbounded' />
  </xs:sequence>
  <xs:attribute name='Context' type='xs:anyURI' use='optional' />
  <xs:anyAttribute namespace='##other' processContents='lax' />
</xs:complexType>

Мне нужно поговорить со службой WS-Trust (STS или Secure Token Service), используя WWSAPI в Windows (C++). В WWSAPI создание собственного XML-кода граничит с ужасными (и я мог бы сказать это щедро), поэтому это мое последнее средство. У меня есть пример запроса и ответа, ожидаемого STS.

Я подумал, что мне было бы намного легче определить схему XML для конкретных / конкретных данных, требуемых STS, и позволить инструменту генерации прокси-сервера веб-службы дать мне [относительно] простую структуру данных, которую я могу заполнить своими необходимыми параметры, которые затем сериализуются в XML автоматически.

Поскольку схема WS-Trust зависит от множества других схем WS-* (например, WS-Addressing, WS-Security, WS-Policy и т. Д.), Я не хочу оказаться в пресловутой кроличьей норе, где мне нужно захватить все этих схем, а затем отредактируйте их все для достижения вышеуказанного результата. Очевидно, что это нежелательный подход, и я предполагаю, что XML-схема предоставляет способы сделать то, что мне нужно...

Оказывается, xs:redefine, вероятно, вполне бы соответствовал моим потребностям, но я не могу использовать xs:redefine, так как мой инструмент генерации прокси (wsutil) его не поддерживает.

Я начал с того, что взял копию схемы WS-Trust и просто заменил приведенное выше определение схемы своим собственным конкретным определением.

Моя проблема в том, что мое конкретное определение по очереди должно предоставлять конкретные версии других элементов, которые также определены в схемах WS-* как символы подстановки. Например: RequestSecurityToken разрешает элемент AppliesTo (из WS-Policy), но определение схемы для AppliesTo также является подстановочным знаком, и я хочу заменить его конкретным определением.

Проблема, с которой я сталкиваюсь, заключается в обеспечении того, чтобы мой сгенерированный XML заканчивался правильными пространствами имен для элементов.

Казалось бы, правильный подход для достижения правильного пространства имен состоит в том, чтобы повторно использовать глобальные элементы схем WS-* с использованием, но это возвращает меня к повторному использованию подстановочного типа и невозможности использовать мой конкретный тип.

Я попытался поместить свои конкретные типы в отдельные файлы.XSD с соответствующими целевыми пространствами имен схемы WS-*, но если я буду использовать их, элемент xxx не будет отображаться (моим сгенерированным прокси) с правильным пространством имен (но дочерние элементы будут быть в правильном пространстве имен).

Итак, если не брать копии всех схем WS-* и не модифицировать их или не урезать, у кого-нибудь есть идеи, как мне этого добиться?

0 ответов

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