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

iris ding updated CXF-4713:
---------------------------

    Attachment: cxf-4713.patch
    
> 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
>         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

Reply via email to