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] [Commented] (CXF-4713) Method inherited from super interface can not be part of operations in wsdl
Date Fri, 21 Dec 2012 01:09:12 GMT

    [ https://issues.apache.org/jira/browse/CXF-4713?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13537591#comment-13537591
] 

iris ding commented on CXF-4713:
--------------------------------

I have tried the same scenario using RI, the operation part is the same with the patch one.
 Without the patch-using the original CXF code, the operation part in porttype is empty.
                
> 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

Mime
View raw message