Axis не может найти отображение, которое необходимо для того, чтобы иметь возможность переводить объекты, которые вы отправляете через XML.Он не знает, как перевести XML в объект или наоборот.Хорошая идея - вернуть объект, который содержит массив объектов.
С помощью Axis вы должны указать ему, как выполнить сопоставление между XML и объектом.Это определяется с использованием WSDL и самих классов.
1) Посмотрите на WSDL, сгенерированный веб-службой: Вы можете найти это, посмотрев http://localhost:8080/Service?wsdl. Проверьте, все ли в порядке.
2) Ось находит свое отображение, посмотрев на возвращаемое значение Class.getTypeDesc ();Проверьте правильность этого сопоставления.
Для одного из моих сервисов у меня есть следующее сопоставление, определенное как возвращаемое значение веб-сервиса (класс RechercherBatimentRetour, подкласс Retour).
typeDesc.setXmlType(new QName("sbatimentto", "RechercherBatimentRetour")); // 1
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("batiments");
elemField.setXmlName(new QName("", "batiments")); // 2
elemField.setXmlType(new QName("sbatimentto", "ResumeBatimentTo"));
elemField.setNillable(true);
typeDesc.addFieldDesc(elemField);
Это определяет возвращаемое значение этой службы SOAP.
// 1 -> Это говорит о том, что WSDL ComplexType RechercherBatimentRetour находится в пространстве имен 'sbatimentto'.
//2 -> Мы добавляем поле 'batiments' к ComplexType, который определяется через метод получения и установки в классе как:
public ResumeBatimentTo[] getBatiments() {
return batiments;
}
public void setBatiments(ResumeBatimentTo[] batiments) {
this.batiments = batiments;
}
ResumeBatimentTo также находится в том же пространстве имен.Таким образом, это заканчивается WSDL, который содержит (среди прочего)
<complexType name="Retour">
<sequence>
<element name="codeRetour" nillable="true" type="xsd:string"/>
<element name="message" nillable="true" type="xsd:string"/>
<element name="statut" type="xsd:boolean"/>
</sequence>
</complexType>
<complexType name="RechercherBatimentRetour">
<complexContent>
<extension base="tns1:Retour">
<sequence>
<element name="batiments" nillable="true" type="impl:ArrayOf_tns1_ResumeBatimentTo"/>
</sequence>
</extension>
</complexContent>
</complexType>
Для всех используемых классов должны быть правильно определены getTypeDesc, getSerializer & getDeserializer.