Я пытаюсь использовать Axis2 для подключения к веб-сервису SOAP. Ранее это работало в Оси 1, но 2 вызывает проблемы. Я обновил код Java, используя wsdl2java
, который сгенерировал заглушки для Axis2, но он падает при обработке элемента ответа сервера с «неожиданным значением подэлемента».
Фрагмент рассматриваемого документа wsdl:
<complexType name="A">
<sequence>
<element name="a" type="xsd:base64Binary" minOccurs="1" maxOccurs="1" nillable="false" />
<element name="b" type="xsd:string" minOccurs="1" maxOccurs="1" />
<element name="c" type="xsd:string" minOccurs="1" maxOccurs="1" />
<element name="d" type="xsd:string" minOccurs="1" maxOccurs="1" />
<element name="e" type="xsd:string" minOccurs="1" maxOccurs="1" />
<element name="f" type="xsd:string" minOccurs="1" maxOccurs="1" />
</sequence>
</complexType>
Возвращаемый ответ выглядит так:
<stuff>
<a>dsfusdbifsdisuibvuidnfuisndfvl\sbvuidn</a>
<b>string</b>
<c>string</c>
<d>string</d>
<e>string</e>
<f>string</f>
</stuff>
<stuff>
<a>dsfusdbifsdisdfsfsdfsdfuibvuidnfuisndfvl\dfgd</a>
<b>string</b>
<c>string</c>
<d>string</d>
<e>string</e>
<f>string</f>
</stuff>
<stuff>
<a>dsfusdbifsdisuibvuidnfuisndfvl\sdfsdfvv</a>
<b>string</b>
<c>string</c>
<d>string</d>
<e>string</e>
<f>string</f>
</stuff>
<stuff>
<a>wwasdfgfbdfb\sbv==uidn</a>
<b>string</b>
<c>string</c>
<d>string</d>
<e>string</e>
<f>string</f>
</stuff>
такие вещи. Большинство из этих <stuff>
блоков обрабатываются нормально, но последний отказывает в <b>
с указанной выше ошибкой. При отладке кода происходит сбой, потому что reader.isStartElement()
возвращает false, а new javax.xml.namespace.QName("","b").equals(reader.getName())
- false - reader.getName()
возвращает «a». Далее при отладке reader.currentElement
сообщает " string " вместо типа обернутого объекта, который он обычно возвращает. Я пробовал это с Аксиом 1.2.7 и 1.2.8 - оба, похоже, страдают от одной и той же проблемы. Это известная ошибка, или кто-нибудь может пролить свет на то, что может происходить?