Как обрабатывать minoccurs = "0" при вызове веб-сервисов? - PullRequest
1 голос
/ 06 октября 2010

У меня есть веб-служба, которую я пытаюсь вызвать с помощью продукта интеграции с мэйнфреймом (DataDirect Shadow z / Services), но мой вопрос носит более общий характер. Я хочу знать, как обычно обрабатывается элемент, определенный как minOccurs = "0". Операция в сторонней службе, которую я вызываю, имеет элемент complexType, где все элементы в ней помечены как minOccurs = "0".

Пример из WSDL

<xs:element minOccurs="0" name="Request">
    <xs:complexType>
        <xs:sequence>
            <xs:element minOccurs="0" name="startDate" type="xs:dateTime"/>
            <xs:element minOccurs="0" name="endDate" type="xs:dateTime"/>
            <xs:element minOccurs="0" name="requestId" type="tns:ObjectName"/>
            <xs:element minOccurs="0" name="reasonCode" type="xs:string"/>
            <xs:element minOccurs="0" name="actionType" type="xs:string"/>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="option" type="xs:string"/>
            <xs:element minOccurs="0" name="comments" type="xs:string"/>
            <xs:element minOccurs="0" name="Name" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

То, как эта служба работает на другом конце, если значение передается службе, , даже если оно пустое или пустое или по умолчанию , значение будет обновлено в сторонней системе. Мне нужен способ пропустить этот элемент в полезной нагрузке на службу . Как это вообще обрабатывается? Я пытался использовать C # в качестве клиента для этой службы, но единственное, что я могу найти, что они предоставляют, это переменная с суффиксом Specified для не примитивных типов, но я не нашел способа опустить примитивные. Если бы я вызывал этот веб-сервис, просто POST отправив SOAP-сообщение на сторонний сервер, я мог бы просто опустить XML для значения, которое я не хотел передавать, но мне просто интересно, как различные реализации клиента веб-сервиса обрабатывают это .

Если это поможет, я полагаю, что третья сторона использует Apache Axis и сказала, что может опустить дополнительные аргументы.

Ответы [ 2 ]

0 голосов
/ 26 октября 2010

Я работал со сторонними веб-службами, которые требуют, чтобы вы передавали значение для всех доступных тегов с параметром Specified.Вы можете передавать практически все, что угодно, если только вы установите Specified=false.

. Обычно у ваших примитивных типов будет тег Specified, а также типы обработки, например int, bool, doubleпроблема, поскольку у них определены значения по умолчанию, и если не установить тег Specified, эти значения будут по умолчанию установлены по умолчанию.

0 голосов
/ 06 октября 2010

Когда вы попробовали POSTing с частью XML, относящейся к отсутствующему аргументу по умолчанию / необязательному аргументу, вы заметили какое-либо обновление для этого аргумента на стороне сервера (ось apache)? Если вы это сделали, то это может быть проблема с тем, как была реализована логика на стороне сервера для этого WSDL (не строго соблюдая контракт / схему, как определено WSDL).

...