Я пытаюсь использовать 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" вместо типа обернутого объекта, который он обычно возвращает. Я пробовал это с Axiom 1.2.7 и 1.2.8 - обе страдают от одной и той же проблемы. Это известная ошибка, или кто-нибудь может пролить свет на то, что может происходить?