You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by thomas <tb...@entelience.com> on 2005/05/02 11:02:22 UTC
Deserialization problem for an inner class
Hello I have no problem for writing Java clients for "normal" beans
returned, but, I have a problem with a bean that is an inner class.
So my bean is something like that :
package my.package;
public class FirstClass
{
...
//my inner class
public class InnerBean
{
....
}
}
Note that FirstClass is also a a webservice class, with a method that
will return an instance of InnerBean.
The wsdd :
<deployment
name="authentication"
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:esis="urn:my.package.FirstClass"
>
<service name="Authentication" provider="java:RPC">
<parameter name="className" value="my.package.FirstClass" />
<parameter name="allowedMethods" value="*" />
<namespace>urn:my.package.FirstClass</namespace>
<beanMapping qname="myNS:FirstClass"
languageSpecificType="java:my.package.FirstClass$InnerBean" />
Now the client :
I declare as usual all the stuff, except for the return type :
QName qn = new QName("urn:my.package.FirstClass","InnerBean");
call.registerTypeMapping(my.package.FirstClass.InnerBean.class,qn,
new
BeanSerializerFactory(my.package.FirstClass.InnerBean.class,qn),
new
BeanDeserializerFactory(my.package.FirstClass.InnerBean.class,qn));
call.setReturnType(qn);
FirstClass.InnerBean
beanReturned=(FirstClass.InnerBean)call.invoke(objectArray);
The problem is that there are no problems server-side, I can watch the
SOAP message that return what i want.
Client-side, I get an exception :
org.xml.sax.SAXException: Unable to create JavaBean of type
my.package.FirstClass$InnerBean. Missing default constructor? Error
was: java.lang.InstantiationException: my.package.FirstClass$InnerBean.
(and of course, both classes FirstClass and InnerBean have a default
constructor).
I don't know where is the problem, in the wsdd, on the client, on the
server?
Re: Deserialization problem for an inner class
Posted by thomas <tb...@entelience.com>.
Reply to myself, for people that will have the same troubles :
the InnerBean class should be static
On May 2, 2005, at 11:02 AM, thomas wrote:
> Hello I have no problem for writing Java clients for "normal" beans
> returned, but, I have a problem with a bean that is an inner class.
>
> So my bean is something like that :
> package my.package;
> public class FirstClass
> {
> ...
>
> //my inner class
> public class InnerBean
> {
> ....
> }
>
> }
>
> Note that FirstClass is also a a webservice class, with a method that
> will return an instance of InnerBean.
>
> The wsdd :
>
> <deployment
> name="authentication"
> xmlns="http://xml.apache.org/axis/wsdd/"
> xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
> xmlns:esis="urn:my.package.FirstClass"
> >
> <service name="Authentication" provider="java:RPC">
> <parameter name="className" value="my.package.FirstClass" />
> <parameter name="allowedMethods" value="*" />
>
> <namespace>urn:my.package.FirstClass</namespace>
> <beanMapping qname="myNS:FirstClass"
> languageSpecificType="java:my.package.FirstClass$InnerBean" />
>
> Now the client :
>
> I declare as usual all the stuff, except for the return type :
>
> QName qn = new QName("urn:my.package.FirstClass","InnerBean");
>
> call.registerTypeMapping(my.package.FirstClass.InnerBean.class,qn,
> new
> BeanSerializerFactory(my.package.FirstClass.InnerBean.class,qn),
> new
> BeanDeserializerFactory(my.package.FirstClass.InnerBean.class,qn));
> call.setReturnType(qn);
> FirstClass.InnerBean
> beanReturned=(FirstClass.InnerBean)call.invoke(objectArray);
>
> The problem is that there are no problems server-side, I can watch the
> SOAP message that return what i want.
> Client-side, I get an exception :
> org.xml.sax.SAXException: Unable to create JavaBean of type
> my.package.FirstClass$InnerBean. Missing default constructor? Error
> was: java.lang.InstantiationException:
> my.package.FirstClass$InnerBean.
>
> (and of course, both classes FirstClass and InnerBean have a default
> constructor).
>
> I don't know where is the problem, in the wsdd, on the client, on the
> server?
>