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

Reply via email to