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.

Reply via email to