cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "iris ding (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CXF-4713) Method inherited from super interface can not be part of operations in wsdl
Date Thu, 20 Dec 2012 06:13:15 GMT
iris ding created CXF-4713:
------------------------------

             Summary: 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


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

Mime
View raw message