Hello - I'm struggling with being able to pass an array of complex object types in an Axis2 POJO. I've attempted multiple different workarounds (array wrapper, arraylists, wrapper of arraylists, etc), but all result in errors.
Can anyone point out the error I'm making in the code below or simply point me at a known correct example of how to pass an array of complex type in a POJO? thank you Below is the trivial example I'm attempting to use and the resulting exception in the Tomcat log. Axis2 version 1.3 is being used within Tomcat version 6.0.14. From what I see in the log, there appears to be an issue with deserializing the array. the "complex" type: public class Message { private String msg; public Message(String msg) { this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } } the service client. "serviceclient" is of RPCServiceClient type and initialized earlier. the code below works when a single object is passed (String for example). public String echo() { Object[] response = null; try { Message[] msgs = { new Message("hello"), new Message("world") }; QName op = new QName("http://web.jArchivix", "echo"); Object[] args = new Object[] { msgs }; Class[] returnTypes = new Class[] { String.class }; System.out.println("msg0: " + msgs[0].getMsg() + " msg[1]: " + msgs[1].getMsg()); response = this.serviceClient.invokeBlocking(op, args, returnTypes); } catch (Exception e) { e.printStackTrace(); } return response != null ? (String) response[0] : null; } the Service code public String echo(Message[] msgs) { Message msg0 = msgs[0]; Message msg1 = msgs[1]; return (msg0.getMsg() + " " + msg1.getMsg()); } Below is the resulting AxisFault that is thrown in Tomcat (dump of catalina.out) [ERROR] Exception occurred while trying to invoke service method echo org.apache.axis2.AxisFault: jArchivix.vo.Message at org.apache.axis2.AxisFault.makeFault(AxisFault.java:417) at org.apache.axis2.engine.DefaultObjectSupplier.getObject(DefaultObjectSupplier.java:29) at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:345) at org.apache.axis2.databinding.utils.BeanUtil.processObject(BeanUtil.java:655) at org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(BeanUtil.java:574) at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:535) at org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java:153) at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:188) at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:98) at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:96) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:145) at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275) at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:120) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.InstantiationException: jArchivix.vo.Message at java.lang.Class.newInstance0(Class.java:340) at java.lang.Class.newInstance(Class.java:308) at org.apache.axis2.engine.DefaultObjectSupplier.getObject(DefaultObjectSupplier.java:27) ... 26 more Below is the exception on the client side: Feb 17, 2008 12:43:15 PM JArchivixServiceClient echo() SEVERE: jArchivix.vo.Message org.apache.axis2.AxisFault: jArchivix.vo.Message at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:486) at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:343) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:389) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163) at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:528) at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:508) at org.apache.axis2.rpc.client.RPCServiceClient.invokeBlocking(RPCServiceClient.java:101) at jArchivix.web.JArchivixServiceClient.echo(JArchivixServiceClient.java:51) at WSTestSet.testWSEcho(WSTestSet.java:96) at WSTestSet$1.runTest(WSTestSet.java:65) at junit.framework.TestCase.runBare(TestCase.java:130) at junit.framework.TestResult$1.protect(TestResult.java:110) at junit.framework.TestResult.runProtected(TestResult.java:128) at junit.framework.TestResult.run(TestResult.java:113) at junit.framework.TestCase.run(TestCase.java:120) at junit.framework.TestSuite.runTest(TestSuite.java:228) at junit.framework.TestSuite.run(TestSuite.java:223) at junit.textui.TestRunner.doRun(TestRunner.java:115) at junit.textui.TestRunner.doRun(TestRunner.java:108) at junit.textui.TestRunner.run(TestRunner.java:76) at WSTestSet.main(WSTestSet.java:161)