Ben,
I am, just here:

 call.registerTypeMapping(ArgumentSet.class, qn, FSSerializerFactory.class, 
FSDeserializerFactory.class, t);

and yes, the ArgumentSet class ( that is the bean ) is available as I make one and 
pass it to the webservice in the call ( it is correctly serialized by the way, I have 
seen the resulting SOAP with tcpmon )



HashMap ht = new HashMap(5);
ht.put("postcode","LS176PJ");
ht.put("addressLine1","2");

//create ArgumentSet
ArgumentSet as = new ArgumentSet();
as.setIdentifier("lookupPostCode");
as.setArguments(ht);


result = (ArgumentSet) call.invoke( new Object[] { as } );


It is only the deserialization of the returned ArgumentSet that is an issue. To be 
honest its driving me mad, I 'm going to write a simple bean that returns a string and 
see how that works, then I'll try a bean with simple values for its fields ( Strings 
and Ints ) , if that works I'll blame it on the HashMap.

Cheers

Russell

-----Original Message-----
From: Ben Souther [mailto:[EMAIL PROTECTED]]
Sent: 15 November 2002 17:54
To: [EMAIL PROTECTED]
Subject: Re: Serializing / Deserializing


Are you calling:  call.registerTypeMapping(args...) anywhere in your code?
Is the class file for you javabean available to your client?














On Friday 15 November 2002 12:46 pm, Russell Brown wrote:
> Cheers ben,
>
> That is pretty much line for line what I have, except that the service
> provider is java:EJB and maybe that is where my problem is. It migt be the
> marshalling at the EJB end that is returning the wrong type. I just don't
> know enough about this to debug it. I have got the Axis source code and am
> reading through the stack trace trying to figure out why this works in the
> client
>
> TypeMapping tm = call.getTypeMapping();
> DeserializerFactory dsf =
> (org.apache.axis.encoding.DeserializerFactory)tm.getDeserializer(qn);
> if(dsf != null) {
>  FSDeserializer fsd =
> (com.freeserve.fsmap.encoding.FSDeserializer)dsf.getDeserializerAs(Constant
>s.AXIS_SAX); }
>
> but not in the RPCHandler class ( where the error is being thrown )
>
> if (dser == null) {
> //hack this to get our deserializer:
> //*****************************************************
>
> TypeMapping tmfs = context.getTypeMapping();
> DeserializerFactory dsf =
> (org.apache.axis.encoding.DeserializerFactory)tmfs.getDeserializer(qname);
> if(dsf != null) {
>       dser =
> (org.apache.axis.encoding.Deserializer)dsf.getDeserializerAs(Constants.AXIS
>_SAX); } else {
>       System.out.println("Still couldn't find it!!!");
> throw new SAXException(Messages.getMessage("noDeser01", localName,"" +
> type)); }
>
> //*****************************************************
>  //end hack
> }
>
>
> So, thanks for your help, I'll post to the list if I can find out what is
> going wrong with my code .
>
> Regards
>
> Russell
>
> -----Original Message-----
> From: Ben Souther [mailto:[EMAIL PROTECTED]]
> Sent: 15 November 2002 17:39
> To: [EMAIL PROTECTED]
> Subject: Re: Serializing / Deserializing
>
>
>
> This is up and working with Axis 1.0. on tomcat 4.1.12.
> I'm sorry if it's sloppy.
> Good luck.
>
>
>
>
> From the WSDD:
>
>  <service name="PayrollSummaryService" provider="java:RPC">
>      <parameter name="className"          
> value="com.someone.somwhere.service.PayrollSummaryService"/> <parameter
> name="allowedMethods" value="*" />
>
>      <beanMapping qname="ns1:PayrollSummaryDataBean"
>                   xmlns:ns1="com.someone.somewhere.payrollsummary.shared"
>                  
> languageSpecificType="java:com.someone.somewhere.payrollsummary.shared.Payr
>ollSummaryDataBean" />
>
>      <beanMapping qname="ns1:EmployeeListDataBean"
>                   xmlns:ns1="com.someone.somewhere.payrollsummary.shared"
>                  
> languageSpecificType="java:com.someone.somewhere.payrollsummary.shared.Empl
>oyeeListDataBean" /> </service>
>
>
>
>
> From the client:
>
>
>                   try{
>     112             Service service = new Service();
>     113             Call    call    = (Call)service.createCall();
>     114             call.setTargetEndpointAddress(
>     115                 new URL(_payrollSummaryServiceURL));
>     116
>     117             QName qName = new QName(
>     118                 "PayrollSummaryService",
>     119                 "getPayrollSummaryData"
>     120             );
>     121             call.setOperationName(qName);
>     122
>     123             //
>     124             // The QName for mapping the PayrollSummaryDataBean
>     125             // to the return value from the web service.
>     126             //
>     127             QName returnQName = new QName(
>     128                 "com.someone.somewhere.payrollsummary.shared",
>     129                 "PayrollSummaryDataBean"
>     130             );
>     131
>     132             call.registerTypeMapping(
>     133                 PayrollSummaryDataBean.class,
>     134                 returnQName,
>     135                 new BeanSerializerFactory(
>     136                     PayrollSummaryDataBean.class,
>     137                     returnQName
>     138                 ),
>     139                 new BeanDeserializerFactory(
>     140                     PayrollSummaryDataBean.class,
>     141                     returnQName
>     142                 )
>     143             );
>     144
>     145             call.setReturnType(
>     146                 returnQName,
>     147                 PayrollSummaryDataBean.class
>     148             );
>     149
>     150             System.out.println("period: " + _period);
>     151
>     152             _dataBean = (PayrollSummaryDataBean)call.invoke(
>     153                 new Object[]{
>     154                         _clientID,
>     155                         _employeeID,
>     156                         _period,
>     157                         _year
>     158                 }
>     159             );
>     160         }catch(Exception e){
>     161             System.out.println(
>     162                 "Error in PayrollSummaryBean: "
>     163                 + e
>     164             );
>     165         }
>     16
>
> On Friday 15 November 2002 11:42 am, Russell Brown wrote:
> > Hi,
> >
> > Has anyone on this list managed to serialize AND deserialize a bean with
> > Axis's bean serializer or there own custom serializer / deserializer ever
> > ?
> >
> > Just to know that it has been done once will fill me with a renewed hope.
> > If you can tell me how you side stepped the ubiquitous error (Error :
> > org.xml.sax.SAXException: Deserializing parameter 'arg1':  could not find
> > deserializer for type ANYTYPEWHATSOEVEREXCEPTPRIMATIVES) as well I may
> > very well weep with joy.
> >
> > Many thanks
> >
> > Russell
> >
> > PS check this out:
> >
> >  call.registerTypeMapping(ArgumentSet.class, qn,
> > FSSerializerFactory.class, FSDeserializerFactory.class, t);
> >
> >  TypeMapping tm = call.getTypeMapping();
> >  boolean isit = tm.isRegistered(ArgumentSet.class, qn);
> >
> >  System.out.println("Well isit ? : "+isit);
> >
> > DeserializerFactory dsf =
> > (org.apache.axis.encoding.DeserializerFactory)tm.getDeserializer(qn);
> >
> > if(dsf != null) {
> >     FSDeserializer fsd =
> > (com.freeserve.fsmap.encoding.FSDeserializer)dsf.getDeserializerAs(Consta
> >nt s.AXIS_SAX); }
> >
> > all works, yes I can find the f***** deserializer but AxisEngine cannot:
> > anyone, anyone ??
> >
> > RB

Reply via email to