[ 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