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
[EMAIL PROTECTED]
http://www.dankulp.com/blog