Does anybody have a working example for passing array of complex type to a
service? I have no problem of getting a array of complex type back. The
following is the details of my program.
I got error: No such operation 'returnOrder' when trying passing a
arrayOfObject to the service.
-- The service looks like:
package samples.userguide.example5;
public class BeanService
{
public Order[] returnOrder(Order [] order) {
for (int i = 0; i < order.length; i++) {
order[i].setCustomerName(i +"_"+order[i].getCustomerName());
}
return order;
}
}
-- the deploy.wsdd looks like:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="OrderProcessor" provider="java:RPC">
<parameter name="className"
value="samples.userguide.example5.BeanService"/>
<parameter name="allowedMethods" value="*"/>
<beanMapping qname="myNS:Order" xmlns:myNS="urn:BeanService"
languageSpecificType="java:samples.userguide.example5.Order"/>
<arrayMapping qname="ns:ArrayOfOrder" xmlns:ns="urn:BeanService"
languageSpecificType="java:samples.userguide.example5.Order[]"
innerType="ns2:Order" xmlns:ns2="urn:BeanService"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</service>
</deployment>
-- the client code:
Service service = new Service();
Call call = (Call) service.createCall();
QName qnOrder = new QName( "urn:BeanService", "Order" );
QName qnOrderArray = new QName( "urn:BeanService",
"ArrayOfOrder" );
call.registerTypeMapping(Order.class, qnOrder,
new
org.apache.axis.encoding.ser.BeanSerializerFactory(Order.class, qnOrder),
new
org.apache.axis.encoding.ser.BeanDeserializerFactory(Order.class, qnOrder));
call.registerTypeMapping(Order[].class, qnOrderArray,
new org.apache.axis.encoding.ser.ArraySerializerFactory(),
new org.apache.axis.encoding.ser.ArrayDeserializerFactory());
String result = "";
Order [] m_order;
try {
call.setTargetEndpointAddress( new
java.net.URL("http://localhost:8080/axis/services/OrderProcessor") );
call.addParameter( "arg1", qnOrderArray, ParameterMode.IN );
call.setOperationName( new QName("OrderProcessor", "returnOrder") );
call.setReturnType( qnOrderArray );
m_order = (Order []) call.invoke( new Object[] { order });
......
Thanks
Teresa
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]