Hi Tony, Its a problem with your Client.java. You need to have this 2 lines of code QName qParam=new QName("urn:PublicService3","Param"); call.registerTypeMapping(Param.class, qParam, new ...);
Every object should have one Qualified Name associated with it. regards Venkatesh On Fri, 6 Feb 2004, Tony Blair wrote: > Hi Venkatesh, > > Thanks. I have corrected the problem but now I am getting this error: > SEVERE: Exception: > org.xml.sax.SAXException: No deserializer for {urn:PublicService3}Param > at org.apache.axis.encoding.DeserializerImpl.onStartElement(Deserializer > Impl.java:485) > at org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerIm > pl.java:428) > at org.apache.axis.encoding.DeserializationContextImpl.startElement(Dese > rializationContextImpl.java:976) > 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:38) > Error : org.xml.sax.SAXException: No deserializer for {urn:PublicService3}Param. > > As you see in the Client code and the deploy.wsdd I have defined deser. I don't know > what is going on. > > Thanks, > Tony. > > --------------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> > > Venkatesh Kancharla <[EMAIL PROTECTED]> wrote: > 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---------------- > > > > > > > > > > > > > > > > > deserializer="apacheaxis.ParamDeserFactory"/> > > > > > > > > > > Thanks, > > Tony. > > > > Venkatesh Kancharla 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 > > > --------------------------------- > Do you Yahoo!? > Yahoo! Finance: Get your refund fast by filing online