Клиент 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?
Спасибо