Re: DOSGI CXF inheritance question
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 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> >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 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 > > > >>> >> >
Re: DOSGI CXF inheritance question
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 Beryozkinwrote: 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 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
Re: DOSGI CXF inheritance question
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 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 >> >> 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 >>> >>> >> >
Re: DOSGI CXF inheritance question
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 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
Re: DOSGI CXF inheritance question
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 > 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 >
Re: DOSGI CXF inheritance question
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
Re: DOSGI CXF inheritance question
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
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