Using the suggestions from the case 2 mentioned in http://wso2.org/library/332, I wrote an Axis2 client to call my Axis2 service that has a string array as one of the params. But I got following error when the call executes:
org.apache.axis2.AxisFault: com.ctc.wstx.exc.WstxParsingException: Expected a text token, got START_ELEMENT. at [row,col {unknown-source}]: [1,401] 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) Any suggestions? Here is the relevant snippet from my WSDL: <types> <s:schema elementFormDefault="qualified" targetNamespace="http://ws.selectica.com/ecm/"> <s:element name="AssignUserToRoles"> <s:complexType> <s:sequence> <s:element name="SessionToken" type="s:string"></s:element> <s:element name="Email" type="s:string"></s:element> <s:element name="RoleId" type="s:string" maxOccurs="unbounded" minOccurs="1"></s:element> </s:sequence> </s:complexType> </s:element> <s:element name="AssignUserToRolesResponse"> <s:complexType></s:complexType> </s:element> </s:schema> </types> <wsdl:message name="AssignUserToRolesRequest"> <wsdl:part name="parameters" element="tns:AssignUserToRoles"></wsdl:part> </wsdl:message> <wsdl:message name="AssignUserToRolesResponse"> <wsdl:part name="parameters" element="tns:AssignUserToRolesResponse"></wsdl:part> </wsdl:message> <portType name="ECMServiceSoap"> <wsdl:operation name="AssignUserToRoles"> <wsdl:input message="tns:AssignUserToRolesRequest"></wsdl:input> <wsdl:output message="tns:AssignUserToRolesResponse"></wsdl:output> </wsdl:operation> </portType> <binding name="ECMServiceSoap" type="tns:ECMServiceSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="AssignUserToRoles"> <soap:operation soapAction="" style="document"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> ... And here is the client code: svcClient = new ServiceClient(); Options options = new Options(); options.setTo(new EndpointReference(serviceURL)); options.setAction("http://localhost:8080/services/ECMServiceSoap/AssignUserToRoles"); svcClient.setOptions(options); OMNamespace ns = fac.createOMNamespace(serviceNamespace, "ns1"); payload = fac.createOMElement("AssignUserToRoles", ns); OMElement value = fac.createOMElement("SessionToken", ns); value.setText(sessionId); payload.addChild(value); OMElement value = fac.createOMElement("Email", ns); value.setText(email); payload.addChild(value); //roles is a String[] OMElement value = BeanUtil.getOMElement(new QName(ns.getNamespaceURI(),"RoleId"), roles, null, false, null); payload.addChild(value); OMElement responseElement=(OMElement) svcClient.sendReceive(payload);