Hi Venkatesh,
THANK YOU. IT WORKED :-) I was actually missing the line QName qParam=new QName("urn:PublicService3","Param"); in Client.java
You are the best. If you ever come to England, please Stop by at the Buckingham palace.
Tony.
Venkatesh Kancharla <[EMAIL PROTECTED]> wrote:
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-------
>
>
>
>
>
>
>> deserializer="apacheaxis.ParamDeserFactory"/>
>
>
>
> 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
Do you Yahoo!?
Yahoo! Finance: Get your refund fast by filing online