Клиент Axis, пропустите пустые теги из (RPC/ кодированный стиль) SOAP-запроса xml

У нас есть веб-сервис SOAP от нашего поставщика (мы не можем его изменить), который использует стиль "RPC/ кодированный". И мы используем Apache Axis (версия 1.4) для генерации и использования клиента.

В запросе одного из методов есть элемент, который выглядит так:

<element maxOccurs="1" minOccurs="0" name="CRD_EXPIRY" nillable="false" type="xsd:dateTime" />

Так что это "пропуск", но не "ноль". Поэтому, когда я оставляю этот параметр пустым (когда мы не называем setCRD_EXPIRY на всех), я ожидаю, что не будет CRD_EXPIRY тег в запросе XML вообще.

Но движок Axis по-прежнему помещает этот тег в запрос, nil="true" атрибут:

      <CRD_EXPIRY xsi:nil="true" xsi:type="xsd:dateTime"/>

Далее я покопался в источниках и нашел эти строки в org.apache.axis.encoding.ser.BeanSerializer класс, который, кажется, делает свое дело:

// . . .
if (propValue == null) {

    // . . .

    // if meta data says minOccurs=0, then we can skip
    // it if its value is null and we aren't doing SOAP
    // encoding.
    if (isOmittable && !isEncoded) {
        continue;
    }
}

context.serialize(qname,
                  null,
                  propValue,
                  xmlType, javaType);
// . . .

Похоже, что для "закодированных" стилей веб-сервисов пустые параметры всегда присутствуют в запросе XML с nil ценности. Даже если они не "нилбл".

Я правда? Если да, то почему это так (не похоже на ошибку)?

И главным образом, как я могу добиться, чтобы пустые параметры не появлялись в запросе XML?

Спасибо

0 ответов

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