You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by András Liter <sk...@gmail.com> on 2011/09/27 14:45:08 UTC

DOSGI CXF inheritance question

Hey,

I bumped into the following error during a DOSGI consumer-provider call:
org.apache.cxf.interceptor.Fault: Couldn't instantiate class. null. Nested
exception is java.lang.InstantiationException: null

As it turned out, I got this exception, because I use abstract Java classes
and inheritance in my Java business objects.
Is there a workaround for this issue, or the only solution is not using the
abstract keyword?

Thanks in advance,
András Liter

Re: DOSGI CXF inheritance question

Posted by Sergey Beryozkin <sb...@gmail.com>.
A patch may be needed

Cheers, Sergey

On 27/09/11 13:45, András Liter wrote:
> Hey,
>
> I bumped into the following error during a DOSGI consumer-provider call:
> org.apache.cxf.interceptor.Fault: Couldn't instantiate class. null. Nested
> exception is java.lang.InstantiationException: null
>
> As it turned out, I got this exception, because I use abstract Java classes
> and inheritance in my Java business objects.
> Is there a workaround for this issue, or the only solution is not using the
> abstract keyword?
>
> Thanks in advance,
> András Liter
>


Re: DOSGI CXF inheritance question

Posted by András Liter <sk...@gmail.com>.
Hello Sergey,

you were right! I just needed to add the jaxb property on the consumer (and
provider) side and then JAXB handles polimorphism very well! I even didnt
need to put the Xml annotations on my classes.

Thanks for the solution!

András Liter

On Thu, Sep 29, 2011 at 1:21 PM, Sergey Beryozkin <sb...@gmail.com>wrote:

> Hi
>
> I think it's non a DOSGi issue, more likely Aegis binding (used by default
> by SOAP proxies) issue. DOSGi itself does not handle the databindings
> Try enable jaxb and add the annotations (as well as import them) as
> suggested by Dan
>
> Cheers, Sergey
>
> On 28/09/11 23:05, András Liter wrote:
>
>> Hello Sergey,
>>
>> Here is the situation simplified:
>>
>> Let's say I have the following Java types as entities/business objects:
>>
>>    - abstract Shape
>>    - Triangle extends Shape
>>    - Rectangle extends Shape
>>
>>
>> And let's say I have the following interface&  implementation to expose
>> via
>>
>> DOSGI-CXF
>>
>> public interface MyInterface {
>>
>> int countSomething(Shape s);
>>
>> }
>>
>> public MyInterfaceImpl {
>>
>> int countSomething(Shape s){
>>   return s.doShapeSpecificThing();
>> }
>> }
>>
>>
>> So in this simple example I have only one method in the interface, which
>> expects an object which IS-A Shape.
>>
>> If I use "simple" CXF (= no DOSGI, no OSGI, but wsdl2java generated
>> artifacts) (for example, in a JBossAS) from the consumer side, I can pass
>> a
>> Rectangle or a Triangle object to this webservice operation and on the
>> provider side, JAXB (or some XML->Java engine :)) will create Rectangle or
>> Triangle objects, and the invoked doShapeSpecificThing() will be the
>> overriden ones in the concrete shape classes. This works fine,
>> polimorphism
>> is good.
>>
>> But, if I would like to do the same thing with CXF-DOSGI, which is having
>> an
>> abstract class (Shape) in a method's signature as parameter or return
>> value,
>> the provider side fails with the following error:
>> org.apache.cxf.interceptor.**Fault: Couldn't instantiate class. null.
>> Nested
>> exception is java.lang.**InstantiationException: null
>>
>> Maybe it doesnt even puts the subclassed parameter object on the consumer
>> side into the request soap envelope (I havent checked), thats why it says
>> null.
>>
>> Removing the abstract keyword from Shape makes it working seemingly, but
>> in
>> fact, if I pass a subclass on the consumer side, only the base one's parts
>> are passed (basically a Shape class, since without abstract, it can be
>> initialised) and I say goodbye polimorphism.
>>
>> I hope I described my scenario understandable. // I have to migrate a
>> project from J2EE to OSGI... here came the CXF - inheritance issue.
>>
>> I wonder if anyone has bumped into this situation.
>>
>> Best regards,
>> András Liter
>>
>>
>> On Wed, Sep 28, 2011 at 10:14 PM, Sergey Beryozkin<sberyozkin@gmail.com**
>> >wrote:
>>
>>  Can you provide more info please, where do abstract classes come into the
>>> picture ?
>>>
>>> Sergey
>>>
>>>
>>> On 28/09/11 19:12, András Liter wrote:
>>>
>>>  Thanks for the tip, it brought some hope, but it just didnt worked.
>>>> The sad thing is that polimorphism doesnt work this way via CXF-DOSGI
>>>> (as
>>>> it
>>>> does in simple CXF).
>>>>
>>>> 2011/9/27 Daniel Kulp<dk...@apache.org>
>>>>
>>>>  On Tuesday, September 27, 2011 2:45:08 PM András Liter wrote:
>>>>
>>>>>
>>>>>  Hey,
>>>>>>
>>>>>> I bumped into the following error during a DOSGI consumer-provider
>>>>>> call:
>>>>>> org.apache.cxf.interceptor.****Fault: Couldn't instantiate class.
>>>>>> null.
>>>>>>
>>>>>>  Nested
>>>>>
>>>>>  exception is java.lang.****InstantiationException: null
>>>>>>
>>>>>>
>>>>>> As it turned out, I got this exception, because I use abstract Java
>>>>>>
>>>>>>  classes
>>>>>
>>>>>  and inheritance in my Java business objects.
>>>>>> Is there a workaround for this issue, or the only solution is not
>>>>>> using
>>>>>>
>>>>>>  the
>>>>>
>>>>>  abstract keyword?
>>>>>>
>>>>>>
>>>>> You MAY be able to do it if you add @XmlSeeAlso annotations in various
>>>>> places
>>>>> (like on the abstract base classes) that point to the various
>>>>> subclasses
>>>>> so
>>>>> that JAXB and such can find the base classes.   Not really sure if/how
>>>>> that
>>>>> would work with DOSGi though..
>>>>>
>>>>>
>>>>>  Thanks in advance,
>>>>>> András Liter
>>>>>>
>>>>>>  --
>>>>> Daniel Kulp
>>>>> dkulp@apache.org
>>>>> http://dankulp.com/blog
>>>>> Talend - http://www.talend.com
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>

Re: DOSGI CXF inheritance question

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi

I think it's non a DOSGi issue, more likely Aegis binding (used by 
default by SOAP proxies) issue. DOSGi itself does not handle the 
databindings
Try enable jaxb and add the annotations (as well as import them) as 
suggested by Dan

Cheers, Sergey
On 28/09/11 23:05, András Liter wrote:
> Hello Sergey,
>
> Here is the situation simplified:
>
> Let's say I have the following Java types as entities/business objects:
>
>     - abstract Shape
>     - Triangle extends Shape
>     - Rectangle extends Shape
>
>
> And let's say I have the following interface&  implementation to expose via
> DOSGI-CXF
>
> public interface MyInterface {
>
> int countSomething(Shape s);
>
> }
>
> public MyInterfaceImpl {
>
> int countSomething(Shape s){
>    return s.doShapeSpecificThing();
> }
> }
>
>
> So in this simple example I have only one method in the interface, which
> expects an object which IS-A Shape.
>
> If I use "simple" CXF (= no DOSGI, no OSGI, but wsdl2java generated
> artifacts) (for example, in a JBossAS) from the consumer side, I can pass a
> Rectangle or a Triangle object to this webservice operation and on the
> provider side, JAXB (or some XML->Java engine :)) will create Rectangle or
> Triangle objects, and the invoked doShapeSpecificThing() will be the
> overriden ones in the concrete shape classes. This works fine, polimorphism
> is good.
>
> But, if I would like to do the same thing with CXF-DOSGI, which is having an
> abstract class (Shape) in a method's signature as parameter or return value,
> the provider side fails with the following error:
> org.apache.cxf.interceptor.Fault: Couldn't instantiate class. null. Nested
> exception is java.lang.InstantiationException: null
>
> Maybe it doesnt even puts the subclassed parameter object on the consumer
> side into the request soap envelope (I havent checked), thats why it says
> null.
>
> Removing the abstract keyword from Shape makes it working seemingly, but in
> fact, if I pass a subclass on the consumer side, only the base one's parts
> are passed (basically a Shape class, since without abstract, it can be
> initialised) and I say goodbye polimorphism.
>
> I hope I described my scenario understandable. // I have to migrate a
> project from J2EE to OSGI... here came the CXF - inheritance issue.
>
> I wonder if anyone has bumped into this situation.
>
> Best regards,
> András Liter
>
>
> On Wed, Sep 28, 2011 at 10:14 PM, Sergey Beryozkin<sb...@gmail.com>wrote:
>
>> Can you provide more info please, where do abstract classes come into the
>> picture ?
>>
>> Sergey
>>
>>
>> On 28/09/11 19:12, András Liter wrote:
>>
>>> Thanks for the tip, it brought some hope, but it just didnt worked.
>>> The sad thing is that polimorphism doesnt work this way via CXF-DOSGI (as
>>> it
>>> does in simple CXF).
>>>
>>> 2011/9/27 Daniel Kulp<dk...@apache.org>
>>>
>>>   On Tuesday, September 27, 2011 2:45:08 PM András Liter wrote:
>>>>
>>>>> Hey,
>>>>>
>>>>> I bumped into the following error during a DOSGI consumer-provider call:
>>>>> org.apache.cxf.interceptor.**Fault: Couldn't instantiate class. null.
>>>>>
>>>> Nested
>>>>
>>>>> exception is java.lang.**InstantiationException: null
>>>>>
>>>>> As it turned out, I got this exception, because I use abstract Java
>>>>>
>>>> classes
>>>>
>>>>> and inheritance in my Java business objects.
>>>>> Is there a workaround for this issue, or the only solution is not using
>>>>>
>>>> the
>>>>
>>>>> abstract keyword?
>>>>>
>>>>
>>>> You MAY be able to do it if you add @XmlSeeAlso annotations in various
>>>> places
>>>> (like on the abstract base classes) that point to the various subclasses
>>>> so
>>>> that JAXB and such can find the base classes.   Not really sure if/how
>>>> that
>>>> would work with DOSGi though..
>>>>
>>>>
>>>>> Thanks in advance,
>>>>> András Liter
>>>>>
>>>> --
>>>> Daniel Kulp
>>>> dkulp@apache.org
>>>> http://dankulp.com/blog
>>>> Talend - http://www.talend.com
>>>>
>>>>
>>>
>>
>


Re: DOSGI CXF inheritance question

Posted by András Liter <sk...@gmail.com>.
Hello Sergey,

Here is the situation simplified:

Let's say I have the following Java types as entities/business objects:

   - abstract Shape
   - Triangle extends Shape
   - Rectangle extends Shape


And let's say I have the following interface & implementation to expose via
DOSGI-CXF

public interface MyInterface {

int countSomething(Shape s);

}

public MyInterfaceImpl {

int countSomething(Shape s){
  return s.doShapeSpecificThing();
}
}


So in this simple example I have only one method in the interface, which
expects an object which IS-A Shape.

If I use "simple" CXF (= no DOSGI, no OSGI, but wsdl2java generated
artifacts) (for example, in a JBossAS) from the consumer side, I can pass a
Rectangle or a Triangle object to this webservice operation and on the
provider side, JAXB (or some XML->Java engine :)) will create Rectangle or
Triangle objects, and the invoked doShapeSpecificThing() will be the
overriden ones in the concrete shape classes. This works fine, polimorphism
is good.

But, if I would like to do the same thing with CXF-DOSGI, which is having an
abstract class (Shape) in a method's signature as parameter or return value,
the provider side fails with the following error:
org.apache.cxf.interceptor.Fault: Couldn't instantiate class. null. Nested
exception is java.lang.InstantiationException: null

Maybe it doesnt even puts the subclassed parameter object on the consumer
side into the request soap envelope (I havent checked), thats why it says
null.

Removing the abstract keyword from Shape makes it working seemingly, but in
fact, if I pass a subclass on the consumer side, only the base one's parts
are passed (basically a Shape class, since without abstract, it can be
initialised) and I say goodbye polimorphism.

I hope I described my scenario understandable. // I have to migrate a
project from J2EE to OSGI... here came the CXF - inheritance issue.

I wonder if anyone has bumped into this situation.

Best regards,
András Liter


On Wed, Sep 28, 2011 at 10:14 PM, Sergey Beryozkin <sb...@gmail.com>wrote:

> Can you provide more info please, where do abstract classes come into the
> picture ?
>
> Sergey
>
>
> On 28/09/11 19:12, András Liter wrote:
>
>> Thanks for the tip, it brought some hope, but it just didnt worked.
>> The sad thing is that polimorphism doesnt work this way via CXF-DOSGI (as
>> it
>> does in simple CXF).
>>
>> 2011/9/27 Daniel Kulp<dk...@apache.org>
>>
>>  On Tuesday, September 27, 2011 2:45:08 PM András Liter wrote:
>>>
>>>> Hey,
>>>>
>>>> I bumped into the following error during a DOSGI consumer-provider call:
>>>> org.apache.cxf.interceptor.**Fault: Couldn't instantiate class. null.
>>>>
>>> Nested
>>>
>>>> exception is java.lang.**InstantiationException: null
>>>>
>>>> As it turned out, I got this exception, because I use abstract Java
>>>>
>>> classes
>>>
>>>> and inheritance in my Java business objects.
>>>> Is there a workaround for this issue, or the only solution is not using
>>>>
>>> the
>>>
>>>> abstract keyword?
>>>>
>>>
>>> You MAY be able to do it if you add @XmlSeeAlso annotations in various
>>> places
>>> (like on the abstract base classes) that point to the various subclasses
>>> so
>>> that JAXB and such can find the base classes.   Not really sure if/how
>>> that
>>> would work with DOSGi though..
>>>
>>>
>>>> Thanks in advance,
>>>> András Liter
>>>>
>>> --
>>> Daniel Kulp
>>> dkulp@apache.org
>>> http://dankulp.com/blog
>>> Talend - http://www.talend.com
>>>
>>>
>>
>

Re: DOSGI CXF inheritance question

Posted by Sergey Beryozkin <sb...@gmail.com>.
Can you provide more info please, where do abstract classes come into 
the picture ?

Sergey

On 28/09/11 19:12, András Liter wrote:
> Thanks for the tip, it brought some hope, but it just didnt worked.
> The sad thing is that polimorphism doesnt work this way via CXF-DOSGI (as it
> does in simple CXF).
>
> 2011/9/27 Daniel Kulp<dk...@apache.org>
>
>> On Tuesday, September 27, 2011 2:45:08 PM András Liter wrote:
>>> Hey,
>>>
>>> I bumped into the following error during a DOSGI consumer-provider call:
>>> org.apache.cxf.interceptor.Fault: Couldn't instantiate class. null.
>> Nested
>>> exception is java.lang.InstantiationException: null
>>>
>>> As it turned out, I got this exception, because I use abstract Java
>> classes
>>> and inheritance in my Java business objects.
>>> Is there a workaround for this issue, or the only solution is not using
>> the
>>> abstract keyword?
>>
>> You MAY be able to do it if you add @XmlSeeAlso annotations in various
>> places
>> (like on the abstract base classes) that point to the various subclasses so
>> that JAXB and such can find the base classes.   Not really sure if/how that
>> would work with DOSGi though..
>>
>>>
>>> Thanks in advance,
>>> András Liter
>> --
>> Daniel Kulp
>> dkulp@apache.org
>> http://dankulp.com/blog
>> Talend - http://www.talend.com
>>
>


Re: DOSGI CXF inheritance question

Posted by András Liter <sk...@gmail.com>.
Thanks for the tip, it brought some hope, but it just didnt worked.
The sad thing is that polimorphism doesnt work this way via CXF-DOSGI (as it
does in simple CXF).

2011/9/27 Daniel Kulp <dk...@apache.org>

> On Tuesday, September 27, 2011 2:45:08 PM András Liter wrote:
> > Hey,
> >
> > I bumped into the following error during a DOSGI consumer-provider call:
> > org.apache.cxf.interceptor.Fault: Couldn't instantiate class. null.
> Nested
> > exception is java.lang.InstantiationException: null
> >
> > As it turned out, I got this exception, because I use abstract Java
> classes
> > and inheritance in my Java business objects.
> > Is there a workaround for this issue, or the only solution is not using
> the
> > abstract keyword?
>
> You MAY be able to do it if you add @XmlSeeAlso annotations in various
> places
> (like on the abstract base classes) that point to the various subclasses so
> that JAXB and such can find the base classes.   Not really sure if/how that
> would work with DOSGi though..
>
> >
> > Thanks in advance,
> > András Liter
> --
> Daniel Kulp
> dkulp@apache.org
> http://dankulp.com/blog
> Talend - http://www.talend.com
>

Re: DOSGI CXF inheritance question

Posted by Daniel Kulp <dk...@apache.org>.
On Tuesday, September 27, 2011 2:45:08 PM András Liter wrote:
> Hey,
> 
> I bumped into the following error during a DOSGI consumer-provider call:
> org.apache.cxf.interceptor.Fault: Couldn't instantiate class. null. Nested
> exception is java.lang.InstantiationException: null
> 
> As it turned out, I got this exception, because I use abstract Java classes
> and inheritance in my Java business objects.
> Is there a workaround for this issue, or the only solution is not using the
> abstract keyword?

You MAY be able to do it if you add @XmlSeeAlso annotations in various places 
(like on the abstract base classes) that point to the various subclasses so 
that JAXB and such can find the base classes.   Not really sure if/how that 
would work with DOSGi though..     

> 
> Thanks in advance,
> András Liter
-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com