You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Fatemeh Chitforoush <ch...@gmail.com> on 2008/08/03 11:18:35 UTC
Re: Service Interface Extension in CXF
Thanx for your reply.
I changed the implementation as you said:
@WebService
@XmlSeeAlso({XChild.class})
public interface ChildServiceInterface extends ParentServiceInterface{
@WebMethod
public String[] getXList();
}
and now, there is no exception during tomcat start-up, but as I call the
service from client, this exception is thrown by JAXB:
javax.xml.bind.JAXBException : XChild is not known to this context !!!!
Don't you know the solution?!
-- fatemeh
dkulp wrote:
>
>
> This is doable, but requires a little bit more setup....
>
> First, the method signature must stay the same as what's in the
> interface. It needs to stay:
> public X[] getXList();
> We only invoke on the actual method object defined from the interface.
>
> The key issue is getting the XChild classes available to JAXB. The
> EASIEST way to do that is to add an annotation to the Interface:
> @XmlSeeAlso({XChild.class})
> (might be able to add it to the impl instead, not really sure)
>
> Dan
>
>
>
> On Jul 30, 2008, at 4:15 AM, Fatemeh Chitforoush wrote:
>
>>
>> Hi,
>>
>> Thanx for your reply :)
>> BTW, I'm using Spring too, and I think maybe the problem relates to
>> the
>> service implementor, which returns XChild instead of X! In fact,
>> this part
>> is not covered in your sample test :S Actually i need inherited
>> services to
>> return objects of different classes (which also extends X)! What do
>> you
>> think?!
>>
>> -- fatemeh
>>
>>
>> Arul Dhesiaseelan wrote:
>>>
>>> Basically, you override base interface method in
>>> ChildServiceInterface.
>>> So, this should work by all means.
>>>
>>> I know for sure this works standalone CXF. I haven't tested in a
>>> servlet
>>> container.
>>>
>>> Here is my standalone test, in case if you are interested.
>>>
>>> public interface ParentServiceInterface {
>>> public String[] getXList();
>>> }
>>>
>>> @WebService
>>> public interface ChildServiceInterface extends
>>> ParentServiceInterface{
>>> @WebMethod
>>> public String[] getXList();
>>> }
>>>
>>> public class ChildServiceImpl implements ChildServiceInterface {
>>> public String[] getXList(){
>>> return new String[] {"child"};
>>> }
>>> }
>>>
>>> public class Server {
>>> public static void main(String args[]) {
>>> System.out.println("Starting Server");
>>> ChildServiceImpl implementor = new ChildServiceImpl();
>>> String address = "http://localhost:9000/child";
>>> Endpoint.publish(address, implementor);
>>> }
>>> }
>>>
>>> public class Client {
>>> public static void main(String args[]) {
>>> JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
>>> factory.setServiceClass(ChildServiceInterface.class);
>>> factory.setAddress("http://localhost:9000/child");
>>>
>>> ChildServiceInterface client =
>>> (ChildServiceInterface)factory.create();
>>> System.out.println("Invoke getXList()....");
>>> System.out.println(client.getXList()[0]);
>>> System.exit(0);
>>>
>>> }
>>> }
>>>
>>> HTH.
>>>
>>> Cheers,
>>> Arul
>>>
>>> Fatemeh Chitforoush wrote:
>>>> Hi,
>>>>
>>>> Does CXF support inheritance in service interfaces?
>>>> I want to have a common interface for a number of services, so I
>>>> have a
>>>> parent interface, and all my service interfaces extend this parent
>>>> interface. When i try to fire up tomcat, this exception is thrown:
>>>> An opration "an operation with name [] already exists in this
>>>> service.
>>>> Does CXF support what I want?
>>>>
>>>> Sample code:
>>>> public interface ParentServiceInterface {
>>>> public X[] getXList();
>>>> }
>>>>
>>>> public interface ChildServiceInterface extends
>>>> ParentServiceInterface{
>>>> @WebMethod
>>>> public X[] getXList();
>>>> }
>>>>
>>>> public class ChildServiceImpl implements ChildServiceInterface {
>>>> public XChild[] getXList(){
>>>> .......
>>>> }
>>>> }
>>>>
>>>> public class XChild extends X{
>>>> ......
>>>> }
>>>>
>>>>
>>>
>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Service-Interface-Extension-in-CXF-tp18708779p18728166.html
>> Sent from the cxf-user mailing list archive at Nabble.com.
>>
>
> ---
> Daniel Kulp
> dkulp@apache.org
> http://www.dankulp.com/blog
>
>
>
>
>
>
--
View this message in context: http://www.nabble.com/Service-Interface-Extension-in-CXF-tp18708779p18797074.html
Sent from the cxf-user mailing list archive at Nabble.com.
Re: Service Interface Extension in CXF
Posted by Daniel Kulp <dk...@apache.org>.
As long as everything meets the rules for JAXB, that should have worked. If
not, you'll probably need to create a small example that shows it failing so
we can dig into it to see why.
Dan
On Sunday 03 August 2008 5:18:35 am Fatemeh Chitforoush wrote:
> Thanx for your reply.
>
> I changed the implementation as you said:
>
> @WebService
> @XmlSeeAlso({XChild.class})
> public interface ChildServiceInterface extends ParentServiceInterface{
> @WebMethod
> public String[] getXList();
> }
>
> and now, there is no exception during tomcat start-up, but as I call the
> service from client, this exception is thrown by JAXB:
> javax.xml.bind.JAXBException : XChild is not known to this context !!!!
>
> Don't you know the solution?!
>
> -- fatemeh
>
> dkulp wrote:
> > This is doable, but requires a little bit more setup....
> >
> > First, the method signature must stay the same as what's in the
> > interface. It needs to stay:
> > public X[] getXList();
> > We only invoke on the actual method object defined from the interface.
> >
> > The key issue is getting the XChild classes available to JAXB. The
> > EASIEST way to do that is to add an annotation to the Interface:
> > @XmlSeeAlso({XChild.class})
> > (might be able to add it to the impl instead, not really sure)
> >
> > Dan
> >
> > On Jul 30, 2008, at 4:15 AM, Fatemeh Chitforoush wrote:
> >> Hi,
> >>
> >> Thanx for your reply :)
> >> BTW, I'm using Spring too, and I think maybe the problem relates to
> >> the
> >> service implementor, which returns XChild instead of X! In fact,
> >> this part
> >> is not covered in your sample test :S Actually i need inherited
> >> services to
> >> return objects of different classes (which also extends X)! What do
> >> you
> >> think?!
> >>
> >> -- fatemeh
> >>
> >> Arul Dhesiaseelan wrote:
> >>> Basically, you override base interface method in
> >>> ChildServiceInterface.
> >>> So, this should work by all means.
> >>>
> >>> I know for sure this works standalone CXF. I haven't tested in a
> >>> servlet
> >>> container.
> >>>
> >>> Here is my standalone test, in case if you are interested.
> >>>
> >>> public interface ParentServiceInterface {
> >>> public String[] getXList();
> >>> }
> >>>
> >>> @WebService
> >>> public interface ChildServiceInterface extends
> >>> ParentServiceInterface{
> >>> @WebMethod
> >>> public String[] getXList();
> >>> }
> >>>
> >>> public class ChildServiceImpl implements ChildServiceInterface {
> >>> public String[] getXList(){
> >>> return new String[] {"child"};
> >>> }
> >>> }
> >>>
> >>> public class Server {
> >>> public static void main(String args[]) {
> >>> System.out.println("Starting Server");
> >>> ChildServiceImpl implementor = new ChildServiceImpl();
> >>> String address = "http://localhost:9000/child";
> >>> Endpoint.publish(address, implementor);
> >>> }
> >>> }
> >>>
> >>> public class Client {
> >>> public static void main(String args[]) {
> >>> JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
> >>> factory.setServiceClass(ChildServiceInterface.class);
> >>> factory.setAddress("http://localhost:9000/child");
> >>>
> >>> ChildServiceInterface client =
> >>> (ChildServiceInterface)factory.create();
> >>> System.out.println("Invoke getXList()....");
> >>> System.out.println(client.getXList()[0]);
> >>> System.exit(0);
> >>>
> >>> }
> >>> }
> >>>
> >>> HTH.
> >>>
> >>> Cheers,
> >>> Arul
> >>>
> >>> Fatemeh Chitforoush wrote:
> >>>> Hi,
> >>>>
> >>>> Does CXF support inheritance in service interfaces?
> >>>> I want to have a common interface for a number of services, so I
> >>>> have a
> >>>> parent interface, and all my service interfaces extend this parent
> >>>> interface. When i try to fire up tomcat, this exception is thrown:
> >>>> An opration "an operation with name [] already exists in this
> >>>> service.
> >>>> Does CXF support what I want?
> >>>>
> >>>> Sample code:
> >>>> public interface ParentServiceInterface {
> >>>> public X[] getXList();
> >>>> }
> >>>>
> >>>> public interface ChildServiceInterface extends
> >>>> ParentServiceInterface{
> >>>> @WebMethod
> >>>> public X[] getXList();
> >>>> }
> >>>>
> >>>> public class ChildServiceImpl implements ChildServiceInterface {
> >>>> public XChild[] getXList(){
> >>>> .......
> >>>> }
> >>>> }
> >>>>
> >>>> public class XChild extends X{
> >>>> ......
> >>>> }
> >>
> >> --
> >> View this message in context:
> >> http://www.nabble.com/Service-Interface-Extension-in-CXF-tp18708779p1872
> >>8166.html Sent from the cxf-user mailing list archive at Nabble.com.
> >
> > ---
> > Daniel Kulp
> > dkulp@apache.org
> > http://www.dankulp.com/blog
--
Daniel Kulp
dkulp@apache.org
http://www.dankulp.com/blog
Re: Service Interface Extension in CXF
Posted by Fatemeh Chitforoush <ch...@gmail.com>.
I also put a 0-arg default constructor for XChild, as you said, but still
throws the same exception!
My code is exactly the same as Child-Parent example (I posted here!) :S It
seems that it should work!!! I am totally confused :S
Arul Dhesiaseelan wrote:
>
> Make sure you have a 0-arg default constructor in place for XChild as
> this is required for JAXB.
>
> -Arul
>
> Fatemeh Chitforoush wrote:
>> Thanx for your reply.
>>
>> I changed the implementation as you said:
>>
>> @WebService
>> @XmlSeeAlso({XChild.class})
>> public interface ChildServiceInterface extends ParentServiceInterface{
>> @WebMethod
>> public String[] getXList();
>> }
>>
>> and now, there is no exception during tomcat start-up, but as I call the
>> service from client, this exception is thrown by JAXB:
>> javax.xml.bind.JAXBException : XChild is not known to this context !!!!
>>
>> Don't you know the solution?!
>>
>> -- fatemeh
>>
>>
>> dkulp wrote:
>>
>>> This is doable, but requires a little bit more setup....
>>>
>>> First, the method signature must stay the same as what's in the
>>> interface. It needs to stay:
>>> public X[] getXList();
>>> We only invoke on the actual method object defined from the interface.
>>>
>>> The key issue is getting the XChild classes available to JAXB. The
>>> EASIEST way to do that is to add an annotation to the Interface:
>>> @XmlSeeAlso({XChild.class})
>>> (might be able to add it to the impl instead, not really sure)
>>>
>>> Dan
>>>
>>>
>>>
>>> On Jul 30, 2008, at 4:15 AM, Fatemeh Chitforoush wrote:
>>>
>>>
>>>> Hi,
>>>>
>>>> Thanx for your reply :)
>>>> BTW, I'm using Spring too, and I think maybe the problem relates to
>>>> the
>>>> service implementor, which returns XChild instead of X! In fact,
>>>> this part
>>>> is not covered in your sample test :S Actually i need inherited
>>>> services to
>>>> return objects of different classes (which also extends X)! What do
>>>> you
>>>> think?!
>>>>
>>>> -- fatemeh
>>>>
>>>>
>>>> Arul Dhesiaseelan wrote:
>>>>
>>>>> Basically, you override base interface method in
>>>>> ChildServiceInterface.
>>>>> So, this should work by all means.
>>>>>
>>>>> I know for sure this works standalone CXF. I haven't tested in a
>>>>> servlet
>>>>> container.
>>>>>
>>>>> Here is my standalone test, in case if you are interested.
>>>>>
>>>>> public interface ParentServiceInterface {
>>>>> public String[] getXList();
>>>>> }
>>>>>
>>>>> @WebService
>>>>> public interface ChildServiceInterface extends
>>>>> ParentServiceInterface{
>>>>> @WebMethod
>>>>> public String[] getXList();
>>>>> }
>>>>>
>>>>> public class ChildServiceImpl implements ChildServiceInterface {
>>>>> public String[] getXList(){
>>>>> return new String[] {"child"};
>>>>> }
>>>>> }
>>>>>
>>>>> public class Server {
>>>>> public static void main(String args[]) {
>>>>> System.out.println("Starting Server");
>>>>> ChildServiceImpl implementor = new ChildServiceImpl();
>>>>> String address = "http://localhost:9000/child";
>>>>> Endpoint.publish(address, implementor);
>>>>> }
>>>>> }
>>>>>
>>>>> public class Client {
>>>>> public static void main(String args[]) {
>>>>> JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
>>>>> factory.setServiceClass(ChildServiceInterface.class);
>>>>> factory.setAddress("http://localhost:9000/child");
>>>>>
>>>>> ChildServiceInterface client =
>>>>> (ChildServiceInterface)factory.create();
>>>>> System.out.println("Invoke getXList()....");
>>>>> System.out.println(client.getXList()[0]);
>>>>> System.exit(0);
>>>>>
>>>>> }
>>>>> }
>>>>>
>>>>> HTH.
>>>>>
>>>>> Cheers,
>>>>> Arul
>>>>>
>>>>> Fatemeh Chitforoush wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> Does CXF support inheritance in service interfaces?
>>>>>> I want to have a common interface for a number of services, so I
>>>>>> have a
>>>>>> parent interface, and all my service interfaces extend this parent
>>>>>> interface. When i try to fire up tomcat, this exception is thrown:
>>>>>> An opration "an operation with name [] already exists in this
>>>>>> service.
>>>>>> Does CXF support what I want?
>>>>>>
>>>>>> Sample code:
>>>>>> public interface ParentServiceInterface {
>>>>>> public X[] getXList();
>>>>>> }
>>>>>>
>>>>>> public interface ChildServiceInterface extends
>>>>>> ParentServiceInterface{
>>>>>> @WebMethod
>>>>>> public X[] getXList();
>>>>>> }
>>>>>>
>>>>>> public class ChildServiceImpl implements ChildServiceInterface {
>>>>>> public XChild[] getXList(){
>>>>>> .......
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> public class XChild extends X{
>>>>>> ......
>>>>>> }
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/Service-Interface-Extension-in-CXF-tp18708779p18728166.html
>>>> Sent from the cxf-user mailing list archive at Nabble.com.
>>>>
>>>>
>>> ---
>>> Daniel Kulp
>>> dkulp@apache.org
>>> http://www.dankulp.com/blog
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>
>
>
--
View this message in context: http://www.nabble.com/Service-Interface-Extension-in-CXF-tp18708779p18825689.html
Sent from the cxf-user mailing list archive at Nabble.com.
Re: Service Interface Extension in CXF
Posted by Arul Dhesiaseelan <ar...@fluxcorp.com>.
Make sure you have a 0-arg default constructor in place for XChild as
this is required for JAXB.
-Arul
Fatemeh Chitforoush wrote:
> Thanx for your reply.
>
> I changed the implementation as you said:
>
> @WebService
> @XmlSeeAlso({XChild.class})
> public interface ChildServiceInterface extends ParentServiceInterface{
> @WebMethod
> public String[] getXList();
> }
>
> and now, there is no exception during tomcat start-up, but as I call the
> service from client, this exception is thrown by JAXB:
> javax.xml.bind.JAXBException : XChild is not known to this context !!!!
>
> Don't you know the solution?!
>
> -- fatemeh
>
>
> dkulp wrote:
>
>> This is doable, but requires a little bit more setup....
>>
>> First, the method signature must stay the same as what's in the
>> interface. It needs to stay:
>> public X[] getXList();
>> We only invoke on the actual method object defined from the interface.
>>
>> The key issue is getting the XChild classes available to JAXB. The
>> EASIEST way to do that is to add an annotation to the Interface:
>> @XmlSeeAlso({XChild.class})
>> (might be able to add it to the impl instead, not really sure)
>>
>> Dan
>>
>>
>>
>> On Jul 30, 2008, at 4:15 AM, Fatemeh Chitforoush wrote:
>>
>>
>>> Hi,
>>>
>>> Thanx for your reply :)
>>> BTW, I'm using Spring too, and I think maybe the problem relates to
>>> the
>>> service implementor, which returns XChild instead of X! In fact,
>>> this part
>>> is not covered in your sample test :S Actually i need inherited
>>> services to
>>> return objects of different classes (which also extends X)! What do
>>> you
>>> think?!
>>>
>>> -- fatemeh
>>>
>>>
>>> Arul Dhesiaseelan wrote:
>>>
>>>> Basically, you override base interface method in
>>>> ChildServiceInterface.
>>>> So, this should work by all means.
>>>>
>>>> I know for sure this works standalone CXF. I haven't tested in a
>>>> servlet
>>>> container.
>>>>
>>>> Here is my standalone test, in case if you are interested.
>>>>
>>>> public interface ParentServiceInterface {
>>>> public String[] getXList();
>>>> }
>>>>
>>>> @WebService
>>>> public interface ChildServiceInterface extends
>>>> ParentServiceInterface{
>>>> @WebMethod
>>>> public String[] getXList();
>>>> }
>>>>
>>>> public class ChildServiceImpl implements ChildServiceInterface {
>>>> public String[] getXList(){
>>>> return new String[] {"child"};
>>>> }
>>>> }
>>>>
>>>> public class Server {
>>>> public static void main(String args[]) {
>>>> System.out.println("Starting Server");
>>>> ChildServiceImpl implementor = new ChildServiceImpl();
>>>> String address = "http://localhost:9000/child";
>>>> Endpoint.publish(address, implementor);
>>>> }
>>>> }
>>>>
>>>> public class Client {
>>>> public static void main(String args[]) {
>>>> JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
>>>> factory.setServiceClass(ChildServiceInterface.class);
>>>> factory.setAddress("http://localhost:9000/child");
>>>>
>>>> ChildServiceInterface client =
>>>> (ChildServiceInterface)factory.create();
>>>> System.out.println("Invoke getXList()....");
>>>> System.out.println(client.getXList()[0]);
>>>> System.exit(0);
>>>>
>>>> }
>>>> }
>>>>
>>>> HTH.
>>>>
>>>> Cheers,
>>>> Arul
>>>>
>>>> Fatemeh Chitforoush wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> Does CXF support inheritance in service interfaces?
>>>>> I want to have a common interface for a number of services, so I
>>>>> have a
>>>>> parent interface, and all my service interfaces extend this parent
>>>>> interface. When i try to fire up tomcat, this exception is thrown:
>>>>> An opration "an operation with name [] already exists in this
>>>>> service.
>>>>> Does CXF support what I want?
>>>>>
>>>>> Sample code:
>>>>> public interface ParentServiceInterface {
>>>>> public X[] getXList();
>>>>> }
>>>>>
>>>>> public interface ChildServiceInterface extends
>>>>> ParentServiceInterface{
>>>>> @WebMethod
>>>>> public X[] getXList();
>>>>> }
>>>>>
>>>>> public class ChildServiceImpl implements ChildServiceInterface {
>>>>> public XChild[] getXList(){
>>>>> .......
>>>>> }
>>>>> }
>>>>>
>>>>> public class XChild extends X{
>>>>> ......
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Service-Interface-Extension-in-CXF-tp18708779p18728166.html
>>> Sent from the cxf-user mailing list archive at Nabble.com.
>>>
>>>
>> ---
>> Daniel Kulp
>> dkulp@apache.org
>> http://www.dankulp.com/blog
>>
>>
>>
>>
>>
>>
>>
>
>