Разработка веб-сервиса с использованием Apache Axis2 - PullRequest
1 голос
/ 01 марта 2012

Я разработал веб-сервис с использованием Apache Axis2, и файл WSDL принимает структуру данных ArrayList. Однако в файле WSDL тип структуры данных отображается следующим образом:

<xs:complexType>
 <xs:sequence>
  <xs:element minOccurs="0" name="myDetails" nillable="true" type="xs:anyType" /> 
 </xs:sequence>
</xs:complexType>

Я пытаюсь сгенерировать клиентский класс, используя Apache Axis2 на основе моего сгенерированного файла WSDL. Я пытаюсь переслать детали ArrayList следующим образом:

ArrayList<String> myDetails = new ArrayList<String>();
myDetails.add("param1,param2,param3");

И пересылка вышеуказанного массива как myDetails.toArray () для класса Client следующим образом:

WebserviceStub ws = new WebserviceStub("http://localhost:8080/Service/services");
CustomerDetails cd = new CustomerDetails();
cd.setMyDetails(myDetails.toArray());
CustomerDetailsResponse cds = ws.customerDetails(cd);

Если я запускаю вышеуказанный клиентский класс как Java-приложение, то отображается следующее сообщение об ошибке:

[INFO] Unable to sendViaPost to url[http://localhost:8080/Service/services/]
org.apache.axis2.AxisFault: Unknow type can not serialize
    at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
    at org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:83)
    at org.apache.axis2.transport.http.AxisRequestEntity.writeRequest(AxisRequestEntity.java:84)
    at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
    at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346)
    at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:557)
    at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199)
    at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:438)
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
Caused by: javax.xml.stream.XMLStreamException: Unknow type can not serialize
    at org.apache.axis2.databinding.utils.ConverterUtil.serializeAnyType(ConverterUtil.java:1456)
    at org.apache.axis2.databinding.ADBDataSource.serialize(ADBDataSource.java:93)
    at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.internalSerialize(OMSourcedElementImpl.java:695)
    at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:563)
    at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:874)
    at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.serializeInternally(SOAPEnvelopeImpl.java:283)
    at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:245)
    at org.apache.axiom.om.impl.llom.OMSerializableImpl.serializeAndConsume(OMSerializableImpl.java:193)
    at org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:79)
    ... 19 more

Можем ли мы передать ArrayList в качестве параметра веб-службе, используя Axis2? Есть ли какие-то ограничения? Любые идеи будут с благодарностью

1 Ответ

0 голосов
/ 28 марта 2013

способ использования ArrayList в веб-сервисе

1.Поддержка большего количества параметров, чем список массивов в классе коллекции.сторона на стороне сервера, использующая @XmlRootElement и обеспечивающая сериализацию этого метода получения и установки массива на стороне клиента и пользователя ...

...