2011-07-28 2 views
3

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) 

답변

2

나는 프로젝트를 devolpe에 Asix2를 사용하고있다. 실제로 Axis2의 경험이 많지 않다. HashMap은 자바에서 복잡한 객체이고, 어떤 기본 객체는 단순한 Array와 같은 Asix2에 의해 suppoet된다. 그래서 복잡한 것을 사용하려고하지 않는다. Axis를 사용할 때 자바의 객체. 당신의 요청은 얻을 수 없다고 생각합니다. 축은 최근에 그것을 지원하지 않습니다. 감사합니다.

0

서버 로그에서 스택 추적을 찾습니다. 이것은 클라이언트 측 오류입니다.

Google의 경우 "유형을 알 수 없음을 직렬화 할 수 없습니다."라는 메시지가 표시되는 경우 많은 스레드가 발견됩니다.

+0

서버 측에 들어가기 전에 실패했습니다. 따라서 메소드를 호출하기 전에 클라이언트 측에서이 스택 추적을 얻습니다. 메소드 메소드에서 하나의 sysout을 추가 했으므로 서버 메소드가 호출되는지 여부를 알 수 있습니다. 이 경우 HashMaps의 배열을 사용할 때 호출되지 않고 String 배열의 경우 gettting이 호출됩니다. 나는 그 문구로 봤지만 좋은 재발견을 시도하지는 않았다. –

관련 문제