Партнер предоставил мне WSDL для своих веб-служб. Я не слишком разбираюсь в веб-сервисах, поэтому немного скептически отношусь к WSDL. Один конкретный метод позволяет нам получить некоторую информацию, но мы можем использовать ее только один раз (или столкнуться со штрафом.) Проблема в том, что она возвращается в виде «сырого XML» внутри ответа SOAP, поэтому я не совсем уверен, что будет быть возвращенным, и, таким образом, как бороться с ним и правильно хранить его.
Соответствующая часть WSDL такова:
<s:element name="MethodResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="MethodResult">
<s:complexType mixed="true">
<s:sequence>
<s:any />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
wsimport сгенерировал следующий класс:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"methodResult"
})
@XmlRootElement(name = "MethodResponse")
public class MethodResponse {
@XmlElement(name = "MethodResult")
protected MethodResponse.MethodResult methodResult;
public MethodResponse.MethodResult getMethodResult() {
return methodResult;
}
public void setMethodResult(MethodResponse.MethodResult value) {
this.methodResult = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
public static class MethodResult {
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
public List<Object> getContent() {
if (content == null) {
content = new ArrayList<Object>();
}
return this.content;
}
}
}
Итак, вопрос в том, каким будет класс объектов, возвращаемых getContent ()? У предоставленного ими образца C # нет MethodResponse или MethodResult, но тип возвращаемого значения - просто XmlNode.
Кстати, хотя код был сгенерирован wsimport, приложение использует Axis2. Другие доступные методы возвращают правильные объекты.
Простой тест (пример сервера, работающий на Mono) сгенерировал исключение на стороне клиента:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Could not deserialize Soap message
Заранее спасибо.