Проблема была задана перед "Apache AXIS Ignore/Пропустить дополнительный элемент при разборе" в 2012 году для Apache Axis 2. Нет ли еще обходного пути для Axis 1.4?
Определение проблемы
Например:
1 - У нас есть определение ответа на мыло ( "ResponseGetCustomerInfo" ) в нашем wsdl при разработке [с Axis 1.4]:
...
<xs:element name="ResponseGetCustomerInfo">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns1:CustomerID"/>
<xs:element ref="ns1:CustomerUsername"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CustomerID" type="xs:integer"/>
<xs:element name="CustomerUsername" type="xs:string"/>
...
2 - Хорошо видеть, что ответ может быть разборчив, когда мы получим следующее:
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ResponseGetCustomerInfo xmlns="http://tempUri.org/">
<CustomerID>1</CustomerID>
<CustomerUsername>raki</CustomerUsername>
</ResponseGetCustomerInfo>
</soap:Body>
</soap:Envelope>
3 - Спустя некоторое время наш поставщик услуг изменил ответ службы и добавляет новые выходные поля в ответ, а мы не знаем, когда и почему;
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ResponseGetCustomerInfo xmlns="http://tempUri.org/">
<CustomerID>1</CustomerID>
<CustomerUsername>raki</CustomerUsername>
<CustomerName>Raki</CustomerName>
<CustomerSurname>Bandao</CustomerSurname>
</ResponseGetCustomerInfo>
</soap:Body>
</soap:Envelope>
4 - Новый ответ, теоретически совместимый со старой версией, поскольку ни одно поле не удалено и не изменено. Но Axis не может разобрать ответ:
"SAXException: Invalid Element ... "
Я не хочу обновлять wsdl и снова восстанавливать клиент веб-сервиса. Итак, есть ли способ пропустить "Неожиданные [вновь добавленные] элементы" в ответе? или любой обходной путь?
Я пытаюсь много способов, но пока не нашел решения.