DTO를 매개 변수로 사용하는 webservice를 만들었습니다. 그리고 DTO는 객체의 배열을 포함합니다. WSDL과 스 켈리 톤 및 클라이언트를 생성했습니다. 문자열 배열을 전달하면 webservice를 호출하려고합니다. Serializable [] array = new String [] { "a", "n"}; 그것은 잘 작동합니다.org.apache.axis2.AxisFault : unknow 타입이 웹 서비스에서 객체 배열을 전달하는 동안 직렬화 할 수 없습니다.
내 요구 사항은 HashMap 배열을 전달하는 것입니다. 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)
서버 측에 들어가기 전에 실패했습니다. 따라서 메소드를 호출하기 전에 클라이언트 측에서이 스택 추적을 얻습니다. 메소드 메소드에서 하나의 sysout을 추가 했으므로 서버 메소드가 호출되는지 여부를 알 수 있습니다. 이 경우 HashMaps의 배열을 사용할 때 호출되지 않고 String 배열의 경우 gettting이 호출됩니다. 나는 그 문구로 봤지만 좋은 재발견을 시도하지는 않았다. –