Hi Tony, There is a problem with your client code.. You have sent the return type as Param and your type casting the result to a ArrayList.. So, modify your Client.java file and you need to modify the statement call.setReturnClass(Param.class)...
regards Venkatesh On Thu, 5 Feb 2004, Tony Blair wrote: > Hi Venkatesh, > > Thanks for the suggestion. I slightly modified my code from yesterday where my bean > takes a Collection and my service also returns a Collection. Based on the error I > get I am not sure if the ser/deser are the problem. Here is the error and thanks for > all the help you can give me. > > -----------error msg------------- > SEVERE: Exception: > org.xml.sax.SAXException: Bad types (class [Ljava.lang.Object; -> class apacheax > is.Param) > at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:311) > at org.apache.axis.encoding.DeserializationContextImpl.startElement(Dese > rializationContextImpl.java:963) > at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.ja > va:198) > at org.apache.axis.message.MessageElement.publishToHandler(MessageElemen > t.java:722) > at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:233) > at org.apache.axis.message.RPCElement.getParams(RPCElement.java:347) > at org.apache.axis.client.Call.invoke(Call.java:2272) > at org.apache.axis.client.Call.invoke(Call.java:2171) > at org.apache.axis.client.Call.invoke(Call.java:1691) > at apacheaxis.Client.main(Client.java:41) > Error : org.xml.sax.SAXException: Bad types (class [Ljava.lang.Object; -> class > apacheaxis.Param) > > -------------------The first bean------------------ > public class Request > { > / ********** this bean now handles collections*************/ > private Collection params=null > > public Collection getParams() > { return params; } > public void setParams(Collection data) > { params=data; } > > } > ------------- The 2nd bean ------------ > public class Param implements java.io.Serializable > { > /********** this class remains unchanged **************/ > private String name=null; > private Object value=null; > public String getName() > { return name; } > public void setName(String data) > { name = data; } > > public Object getValue() > { return value; } > public void setValue(Object data) > { value=data; } > } > > -------------- The service -------------- > public class PublicService3 > { > /********Service now is returning Collection *******/ > public Collection getSeveralBusinessLocation(Request req){ > Collection busLoc = new ArrayList(2); > Param line1= new Param(); > line1.setName("LINE_1"); > line1.setValue("121 River Street"); > busLoc.add(line1); > Param name= new Param(); > name.setName("BUSINESS_NAME"); > name.setValue("Marsh"); > busLoc.add(name); > > return busLoc; > } > } > ------------Client --------- > public class Client > { > public static void main(String [] args) throws Exception > { > Options options = new Options(args); > > Request req = new Request(); > > Service service = new Service(); > Call call = (Call) service.createCall(); > QName qn = new QName( "urn:PublicService3", "Request" ); > call.registerTypeMapping(Request.class, qn, > new > org.apache.axis.encoding.ser.BeanSerializerFactory(Request.class, qn), > new > org.apache.axis.encoding.ser.BeanDeserializerFactory(Request.class, qn)); > call.registerTypeMapping(Param.class, qn, > new > org.apache.axis.encoding.ser.BeanSerializerFactory(Param.class, qn), > new > org.apache.axis.encoding.ser.BeanDeserializerFactory(Param.class, qn)); > Collection result=null; > try { > call.setTargetEndpointAddress( new java.net.URL(options.getURL()) ); > call.setOperationName( new QName("PublicService3", > "getSeveralBusinessLocation") ); > call.addParameter( "arg1", qn, ParameterMode.IN ); > call.setReturnClass(Param.class); > result = (ArrayList) call.invoke( new Object[] { req } ); > } catch (AxisFault fault) { > String error = "Error : " + fault.toString(); > System.out.println(error); > } > System.out.println("Name Value"); > System.out.println("------------------------"); > Iterator itr = result.iterator(); > while(itr.hasNext()){ > Param p = (Param)itr.next(); > String name = p.getName(); > String value = (String)p.getValue(); > System.out.println(name+" "+value); > } > } > } > > -----------deploy.wsdd---------------- > <deployment xmlns="http://xml.apache.org/axis/wsdd/" > xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> > <service name="PublicService3" provider="java:RPC" style="wrapped"> > <parameter name="className" value="apacheaxis.PublicService3"/> > <parameter name="allowedMethods" value="getSeveralBusinessLocation"/> > <beanMapping qname="myNS:Request" xmlns:myNS="urn:PublicService3" > languageSpecificType="java:apacheaxis.Request"/> > <beanMapping qname="myNS:Param" xmlns:myNS="urn:PublicService3" > languageSpecificType="java:apacheaxis.Param"/> > <typeMapping qname="myNS:Param" xmlns:myNS="urn:PublicService3" > languageSpecificType="java:apacheaxis.Param" > deserializer="apacheaxis.ParamDeserFactory"/> > </service> > </deployment> > > > Thanks, > Tony. > > Venkatesh Kancharla <[EMAIL PROTECTED]> wrote: > Have a look at org.apache.axis.encoding.ser package. It contains all the > serializers and deserializers for some collecion objects. > > On Wed, 4 Feb 2004, Tony Blair wrote: > > > Venkatesh, > > > > Does Axis allow beans to have Collections as their data member? > > > > Thanks, > > Tony. > > > > Venkatesh Kancharla wrote: > > > > > > Error : org.xml.sax.SAXException: SimpleDeserializer encountered a child element > > > , which is NOT expected, in something it was trying to deserialize. > > > > > > My client is invoking a call to the service and pass it a bean that has a > > > complex type as a data member. Should I post the code and deploy.wsdd? > > > > is your complex object a bean? you can only pass beans ( it should have > > setter/getter methods for all of its instance variables) > > > > > > > > > > Thanks in advance. > > > > > > > > > --------------------------------- > > > Do you Yahoo!? > > > Yahoo! SiteBuilder - Free web site building tool. Try it! > > > > > > --------------------------------- > > Do you Yahoo!? > > Yahoo! SiteBuilder - Free web site building tool. Try it! > > > --------------------------------- > Do you Yahoo!? > Yahoo! Finance: Get your refund fast by filing online