Я создал веб-сервис, который принимает DTO в качестве параметра.И DTO содержит массив объектов.Я создал WSDL, скелеты и клиентов.Я пытаюсь вызвать веб-сервис, если передам массив строк, скажем: Serializable [] array = new String [] {"a", "n"};все работает нормально.
Теперь мое требование - передать массив HashMaps. Я не могу этого сделать, хотя HashMap реализует Serializable.
HashMap<String, String> hashMap1 = new HashMap<String, String>();
HashMap<String, String> hashMap2 = new HashMap<String, String>();
hashMap1.put("key1", "value1");
hashMap2.put("key1", "value1");
Serializable[] maps = new HashMap[] { hashMap1, hashMap2 };
myDTO.setParams(maps);
request.setDTO(myDTO);
InvokeServiceResponse response = stub.serviceMethod(request);
Я использую Axis2.2.1.5, Tomcat 6 и Eclipse Helios.
Трассировка стека, которую я здесь привожу для справки.
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)