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 <sberyoz...@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<sberyoz...@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
>>>>> dk...@apache.org
>>>>> http://dankulp.com/blog
>>>>> Talend - http://www.talend.com
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>

Reply via email to