Help: AxisFault
843834May 10 2003 — edited May 14 2003I am using Axis with WebLogic for a test web service trying to transfer a hashtable (both sides are using Java), everything was find then I got the following Error, would anyone point out what is going out please? Thanks in advance.
Error invoking operation:
javax.xml.rpc.JAXRPCException: Number of parameters passed in (1) doesn't match
the number of IN/INOUT parameters (0) from the addParameter() calls
at org.apache.axis.client.Call.invoke(Call.java:1329)
at ass10.Client.doGetHashtable(Client.java:45)
at ass10.Client.main(Client.java:72)
Note: the string "uniqueName" in:
call.addParameter("uniqueName", qName, ParameterMode.OUT);
is not referenced anywhere. I don't understand where it should be referenced.
client.java line 45 (where the Error occurs) is:
hashtable = (Hashtable) call.invoke(new Object[] {bean});
bean is just a very simple javabean file.
********************************************************************
Following is the client file:
package ass10;
import java.util.*;
import org.apache.axis.*;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
import javax.xml.rpc.*;
import java.rmi.*;
public class Client {
private Hashtable hashtable;
private Item[] items;
private Bean bean;
private Call call;
private QName qName;
public Client() {
}
public String doGetHashtable() {
bean = new Bean();
Service service = new Service();
try {
call = (Call) service.createCall();
}
catch (ServiceException ex) {
ex.printStackTrace();
}
qName = new QName("urn:Server", "Bean");
call.registerTypeMapping(Bean.class, qName,
new org.apache.axis.encoding.ser.
BeanSerializerFactory(Bean.class, qName),
new org.apache.axis.encoding.ser.
BeanDeserializerFactory(Bean.class, qName));
try {
call.setTargetEndpointAddress(
"http://localhost:7001/axis/services/StockService");
call.setOperationName(new QName("StockService", "doSetHashtable"));
call.addParameter("uniqName", qName, ParameterMode.OUT);
call.setReturnType(qName, Hashtable.class);
hashtable = (Hashtable) call.invoke(new Object[] {bean});
}
catch (AxisFault fault) {
fault.printStackTrace();
}
catch (RemoteException ex) {
ex.printStackTrace();
}
if (hashtable.isEmpty()) {
return "Stock is empty";
}
else {
StringBuffer buffer = new StringBuffer(
"Item Name\t\tItem Price\t\tItem Quantity\n");
for (Enumeration value = hashtable.elements(); value.hasMoreElements(); ) {
Item item = (Item) value.nextElement();
buffer.append(item.getItemName() + "\t\t" +
item.getItemPrice() + "\t\t" +
item.getItemQuantity() + "\n");
}
return buffer.toString();
}
}
public static void main(String[] args) {
Client client = new Client();
System.out.println(client.doGetHashtable());
}
}
**********************************************************
Following is the WSDD file:
<?xml version="1.0" encoding="UTF-8"?>
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="StockService" provider="java:RPC">
<parameter name="className" value="ass10.Server"/>
<parameter name="allowedMethods" value="*"/>
<parameter name="scope" value="Session"/>
<BeanMapping
qname="Bean"
languageSpecificType="java:ass10.Bean"
/>
</service>
</deployment>
****************************************************************