You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Daniel Kulp (JIRA)" <ji...@apache.org> on 2012/12/21 16:45:13 UTC

[jira] [Resolved] (CXF-4713) Method inherited from super interface can not be part of operations in wsdl

     [ https://issues.apache.org/jira/browse/CXF-4713?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Kulp resolved CXF-4713.
------------------------------

       Resolution: Fixed
    Fix Version/s: 2.7.2
                   2.6.5
         Assignee: Daniel Kulp
    
> Method inherited from super interface can not be part of operations in wsdl 
> ----------------------------------------------------------------------------
>
>                 Key: CXF-4713
>                 URL: https://issues.apache.org/jira/browse/CXF-4713
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-WS Runtime
>    Affects Versions: 2.6
>            Reporter: iris ding
>            Assignee: Daniel Kulp
>             Fix For: 2.6.5, 2.7.2
>
>         Attachments: cxf-4713.patch
>
>
> 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(Method)
> 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(Method), 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!

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira