Hi, Have experimented a little bit - if I interpret spec correctly it looks like CXF defect for me. Could you please create Jira issue and perhaps also create a patch?
Cheers, Andrei. > -----Original Message----- > From: iris ding [mailto:[email protected]] > Sent: Donnerstag, 20. Dezember 2012 02:57 > To: [email protected] > Subject: method inherited from super interface can not be part of operations > in wsdl > > I want to expose some existed class as webservice use below logic: > 1. Define the SEI as below: > @javax.jws.WebService > public interface AddNumbersInterface extends IrisSuperInterface{ } > > 2. Define the implementation as below: > @javax.jws.WebService (serviceName="AddNumbers") public class > AddNumbers extends AddNumbersBusiness implements > AddNumbersInterface{ } 3. Below the original business logic class: > public class AddNumbersBusiness implements IrisSuperInterface{ > public String addNumbers(int arg0, int arg1) throws > AddNumbersException { > if(arg0 + arg1 <0){ > throw new AddNumbersException("Sum is less than > 0."); > } > return "Result = " + String.valueOf(arg0 + arg1); > } > public String addNegatives(int arg0, int arg1) throws > AddNegativesException { > // expect 2 negative numbers > if(arg0>0 || arg1>0){ > throw new AddNegativesException("Expected all > negative numbers."); > } > return "Result = " + String.valueOf(arg0 + arg1); > } > public String useAnno(int arg0, int arg1) throws AnnoException { > if(arg0 + arg1 <0){ > throw new AnnoException("userAnno: Sum is less > than 0."); > } > return "Result = " + String.valueOf(arg0 + arg1); > } > > } > 4. Below is the original business interface: > public interface IrisSuperInterface { > > public String addNumbers(int arg0, int arg1) throws > AddNumbersException; > public String addNegatives(int arg0, int arg1) throws > AddNegativesException; > public String useAnno(int arg0, int arg1) throws AnnoException; } > > Now if I deploy below ear into server and the generated wsdl is like below: > <wsdl:definitions name="AddNumbers" targetNamespace="xxxxxxxx"> > <wsdl:portType name="AddNumbersInterface"> </wsdl:portType> > <wsdl:binding name="AddNumbersSoapBinding" > type="tns:AddNumbersInterface"><soap:binding style="document" > transport="http://schemas.xmlsoap.org/soap/http"/> > </wsdl:binding> > <wsdl:service name="AddNumbers"> > <wsdl:port binding="tns:AddNumbersSoapBinding" > name="AddNumbersPort"><soap:address > location="http://xxxxxxxxxx/AddNumbers"/></wsdl:port> > </wsdl:service> > </wsdl:definitions> > > The portType part is empty. I have a look into CXF and found > :org.apache.cxf.jaxws.support.JaxWsServiceConfiguration.isWebMethod(M > ethod) > will check whether the super interface has @webservice annotation defined. > so in our case it fails. > > According to : > 3.4.1 Inheritance > WSDL 1.1 does not define a standard representation for the inheritance of > wsdl:portType elements. > When mapping an SEI that inherits from another interface, the SEI is treated > as if all methods of the inherited interface were defined within the SEI. > > we should not check the @webservice annotation in SEI's super interface. > I propsed to add below lines into > org.apache.cxf.jaxws.support.JaxWsServiceConfiguration.isWebMethod(Me > thod), > do you have any comments for it? > > > Class<?> cls = method.getDeclaringClass(); > if (cls.isInterface() && ( > cls.isAssignableFrom(implInfo.getImplementorClass()) || > cls.isAssignableFrom(implInfo.getSEIClass()))) { > return Boolean.TRUE; > } > > Thanks a lot! > > Iris Ding > > > > > > -- > View this message in context: http://cxf.547215.n5.nabble.com/method- > inherited-from-super-interface-can-not-be-part-of-operations-in-wsdl- > tp5720553.html > Sent from the cxf-user mailing list archive at Nabble.com.
